差分約束系統。
分析一下三種情況:
1.農場a
aa比農場b
bb至少多種植了c
cc個單位的作物
即a ≥b
+c
−>b≤
a−
ca\geq b+c->b\leq a-c
a≥b+c−
>b≤
a−c,a
aa向b
bb連一條長度為−c-c
−c的單向邊。
2.農場a
aa比農場b
bb至多多種植了c
cc個單位的作物。
即a ≤b
+c
a\leq b+c
a≤b+c,b
bb向a
aa連一條長度為c
cc的單向邊。
3.農場a
aa與農場b
bb種植的作物數一樣多。
即a =b
−>a≤
ba=b->a\leq b
a=b−
>a≤
b且b≥
ab\geq a
b≥a,a,b
a,ba,
b之間連一條長度為0
00的雙向邊。
然後跑spfa最短路判負環就行了,注意這道題bfs
bfsbf
s會tt
t,df
sdfs
dfs才能過。
#include
using
namespace std;
const
int max=
10005
;int n,m,size;
int first[max]
,sum[max]
,v[max]
,dis[max]
;struct shue[max<<2]
;inline
intget_int()
inline
void
build
(int x,
int y,
int z)
inline
bool
spfa()
}}}return1;
}int
main()
for(
int i=
1;i<=n;i++
)build(0
,i,0);
if(spfa()
)puts
("yes");
else
puts
("no");
return0;
}
#include
using
namespace std;
const
int max=
10005
;int n,m,size,flag;
int first[max]
,sum[max]
,v[max]
,dis[max]
;struct shue[max<<2]
;inline
intget_int()
inline
void
build
(int x,
int y,
int z)
inline
void
spfa
(int p)
dis[to]
=dis[p]
+e[u]
.len;
spfa
(to);}
} v[p]=0
;}intmain()
for(
int i=
1;i<=n;i++
)build(0
,i,0);
memset
(dis,
0x3f
,sizeof
(dis)
),dis[0]
=0;spfa(0
);if(
!flag)
puts
("yes");
else
puts
("no");
return0;
}
BZOJ 3436 小K的農場
題解 差分約束 模板題 差分約束系統 聯絡 最短路 對於操作1 a b geqslant c rightarrow b leqslant a c 也就是說a向b連一條 c的邊 對於操作2 a b leq c 也就是b向a連一條c的邊 對於操作三 a b leq 0 和 b a leq 0 也就是a向...
BZOJ 3436 小K的農場
time limit 10 sec memory limit 128 mb submit 938 solved 417 submit status discuss 背景小k是個特麼喜歡玩mc的孩紙。描述小k在mc裡面建立很多很多的農場,總共n個,以至於他自己都忘記了每個農場中種植作物的具體數量了,他...
BZOJ 3436 小k的農場(差分約束)
description 背景 小k是個特麼喜歡玩mc的孩紙。描述小k在mc裡面建立很多很多的農場,總共n個,以至於他自己都忘記了每個農場中種植作物的具體數量了,他只記得一些含糊的資訊 共m個 以下列三種形式描述 農場a比農場b至少多種植了c個單位的作物,農場a比農場b至多多種植了c個單位的作物,農場...