Luogu P1993 小K的農場

2022-04-30 19:12:08 字數 1390 閱讀 5841

小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 個單位的作物 ,記為a - b ≥ c 。b向a連邊權為c的邊

對於農場 a 比農場 b 至多多種植了 c 個單位的作物 ,記為a - b ≤ c 。a向b連邊權為-c的邊

對於農場 a 種植的的數量和 b 一樣多,則用a = b表示。a,b之間連邊權為0的雙向邊

最後再從0號點向每個點連權為0的邊以便於檢查是否有負環。

負環用spfa處理即可。

#include#include

#include

using

namespace

std;

const

int maxn = 50005

;const

int inf = 0x3f3f3f3f

;struct

edge l[maxn];

intn,m;

inthead[maxn],cnt;

intdis[maxn];

bool

vis[maxn];

bool spfa(int

x) }

vis[x] = false

;

return

true;}

inline

void add(int x,int y,int

z) int

main()

for(int i = 1;i <= n;i++) add(0,i,0),dis[i] = -inf;

if(spfa(0)) puts("

yes"

);

else puts("no"

);

return0;

}

P1993 小K的農場

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

P1993 小k的農場

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

P1993 小K的農場 題解

這是一道差分約束的題不會差分約束系統的人請往這邊走 差分約束系統,其形式非常像單源最短路的三角形不等式,所以已圖論演算法來列出方程 我是按求至少值得演算法來求的,求最大值相反 left a b geq c k 1 b a geq c k 2 a b geq 0,b a geq 0 k 3 end r...