P1993 小k的農場

2022-05-18 06:12:16 字數 2007 閱讀 6271

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

思路差分約束,有三種情況

1、a - b >= c, 連正邊

2、a - b <= c, 連反邊

3、a - b = 0,   邊權為0,且是 a -> b = b -> a = 0;

code

1 #include 2

#define dbg(x) cout << #x << "=" << x << endl

3#define eps 1e-8

4#define pi acos(-1.0)56

using

namespace

std;

7 typedef long

long

ll;8

9 templateinline void read(t &res)

1015

16namespace

_buff

24return ib == ie ? -1 : *ib++;25}

26}2728

intqread()

36if (c == '-'

) 40

for (; c >= '

0' && c <= '

9'; c =getc())

43return pos ? ret : -ret;44}

4546

const

int maxn = 1e4 + 7;47

const

int inf = 0x3f3f3f3f;48

49int

n,m;

5051

int head[maxn << 1], edge[maxn << 1], nxt[maxn << 1

];52

int c[maxn << 1

];53

intcnt;

54int dis[maxn], in

[maxn];

55bool

vis[maxn];

5657

void buildgraph(int u, int v, int

w) 64

65bool spfa(int

u) 88}89

}90}91

}92return

false;93

}9495int

main()

96106

else

if(opt == 2

) 110

else

115}

116for ( int i = 1; i <= n; ++i )

120if(spfa(0

)) 123

else

126return0;

127 }

view code

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...

洛谷P1993 小K的農場

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