小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輸出 #13 1 2
1 1 3 1
2 2 3 2
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 2view code#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 }
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,...