小K的農場(差分約束,spfa)

2022-02-27 05:19:06 字數 1440 閱讀 7373

小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」。

顯然是到差分約束裸題

對於第乙個關係,我們建一條a->b邊權為c的邊

對於第二個關係,我們建一條b->a邊權為-c的邊

對於第三個關係,我們建a->b與b->a兩條邊權為0的邊

然後我們用spfa跑最長路即可

#include#include

#include

#include

#define rii register int i

#define rij register int j

using

namespace

std;

int n,m,cnt,vis[20005],head[10005],last[10005],jl[10005

];queue

q;struct

ljbx[

30005

];void add(int

from,int to,int

val)

if(last[from]!=0

)

last[

from]=cnt;

}bool spfa(int

st)

if(spfa(x[i].to)==false

) }}

vis[st]=0

;

return

true;}

intmain()

for(rii=1;i<=m;i++)

if(p==2

)

if(p==3

)

}for(rii=1;i<=n;i++)

bool kkk=spfa(0

);

if(kkk==true

)

else

}

小K的農場 差分約束

description背景 小k是個特麼喜歡玩mc的孩紙。描述小k在mc裡面建立很多很多的農場,總共n個,以至於他自己都忘記了每個農場中種植作物的具體數量了,他只記得一些含糊的資訊 共m個 以下列三種形式描述 農場a比農場b至少多種植了c個單位的作物,農場a比農場b至多多種植了c個單位的作物,農場a...

BZOJ 3436 小k的農場(差分約束)

description 背景 小k是個特麼喜歡玩mc的孩紙。描述小k在mc裡面建立很多很多的農場,總共n個,以至於他自己都忘記了每個農場中種植作物的具體數量了,他只記得一些含糊的資訊 共m個 以下列三種形式描述 農場a比農場b至少多種植了c個單位的作物,農場a比農場b至多多種植了c個單位的作物,農場...

P1993 小K的農場(差分約束)

小k的農場 題目描述 小k在mc裡面建立很多很多的農場,總共n個,以至於他自己都忘記了每個農場中種植作物的具體數量了,他只記得一些含糊的資訊 共m個 以下列三種形式描述 農場a比農場b至少多種植了c個單位的作物,農場a比農場b至多多種植了c個單位的作物,農場a與農場b種植的作物數一樣多。但是,由於小...