洛谷 P1993 小K的農場

2022-04-04 17:03:18 字數 2162 閱讀 4587

小k在mc裡面建立很多很多的農場,總共n個,以至於他自己都忘記了每個農場中種植作物的具體數量了,他只記得一些含糊的資訊(共m個),以下列三種形式描述:

但是,由於小k的記憶有些偏差,所以他想要知道存不存在一種情況,使得農場的種植作物數量與他記憶中的所有資訊吻合。

輸入格式:

第一行包括兩個整數 n 和 m,分別表示農場數目和小 k 記憶中的資訊數目。

接下來 m 行:

如果每行的第乙個數是 1,接下來有 3 個整數 a,b,c,表示農場 a 比農場 b 至少多種植

了 c 個單位的作物。

如果每行的第乙個數是 2,接下來有 3 個整數 a,b,c,表示農場 a 比農場 b 至多多種植

了 c 個單位的作物。如果每行的第乙個數是 3,家下來有 2 個整數 a,b,表示農場 a 終止的

數量和 b 一樣多。

輸出格式:

如果存在某種情況與小 k 的記憶吻合,輸出「yes」,否則輸出「no」。

輸入樣例#1: 複製

3 3

3 1 2

1 1 3 1

2 2 3 2

輸出樣例#1: 複製

yes

對於 100% 的資料保證:1 ≤ n,m,a,b,c ≤ 10000。

思路:設d[i]表示第i個點的數值。

那麼對於約束

1:d[a]-d[b]>=c

2:d[a]-d[b]<=c

3:d[a]=d[b]

讓我們稍微變化一下式子

1:d[b]<=d[a]-c

2:d[a]<=d[b]+c

3:d[a]<=d[b]+0,d[b]<=d[a]+0

這不是和最短路中dist的定義很像嗎?每個點的距離都小於等於能到他的點的距離+邊權。

於是我們將其轉化成乙個最短路模型。

對於約束

1:我們連邊(a,b,-c).

2:我們連邊(b,a,c).

3:我們連邊(a,b,0),(b,a,0)。

因為d[i]>=0,所以我們建乙個起點s,向所有點連一條(s,i,0)的邊。

然後d[s]顯然=0.

我們發現這樣子跑乙個最短路就能確定每個點的d值啦

那什麼時候是無解呢?當然是無法確定每個點的最短路的時候,也就是圖中存在負權環。

我們建完圖以後判斷是否存在負權環就可以啦。

#include#include

#include

#include

#include

#define maxn 100010

using

namespace

std;

queue

que;

intn,m,tot,flag;

intdis[maxn],vis[maxn];

intto[maxn],cap[maxn],net[maxn],head[maxn];

void add(int u,int v,int

w)void spfa(int

x) spfa(to[i]);

}vis[x]=0;}

intmain()

else

if(opt==2

) else

if(opt==3

) }

for(int i=1;i<=n;i++) add(0,i,0

); memset(dis,

0x7f,sizeof

(dis));

dis[

0]=0;spfa(0

);

if(flag) printf("no"

);

else printf("

yes"

); }

/*3 3

3 1 2

1 1 3 1

2 2 3 2

*//*

10 10

3 9 5

1 6 1 1

1 2 8 0

1 2 8 1

2 4 5 0

1 1 2 1

1 10 5 0

1 10 1 0

2 6 7 0

2 9 3 0

*/

洛谷P1993 小K的農場

小k在mc裡面建立很多很多的農場,總共n個,以至於他自己都忘記了每個農場中種植作物的具體數量了,他只記得一些含糊的資訊 共m個 以下列三種形式描述 但是,由於小k的記憶有些偏差,所以他想要知道存不存在一種情況,使得農場的種植作物數量與他記憶中的所有資訊吻合。輸入格式 第一行包括兩個整數 n 和 m,...

洛谷P1993 小K的農場

這道題的實質是差分約束。我們逐個分析。設 a 農場中有 d a 個單位植物,b 農場為 d b 對於第一點,則滿足 d a d b geq c 變形下就變成 d b d a leq c 對於第二點 d a d b leq c 對於第三點 d a d b 即 d a d b 0 變成不等式就要同時滿足...

洛谷 P1993 小K的農場

本天的第二道題解。感覺今天的題都很有價值呢 那麼放送題目。題目描述 小k在mc裡面建立很多很多的農場,總共n個,以至於他自己都忘記了每個農場中種植作物的具體數量了,他只記得一些含糊的資訊 共m個 以下列三種形式描述 農場a比農場b至少多種植了c個單位的作物,農場a比農場b至多多種植了c個單位的作物,...