對於n
nn個物品,給出m
mm個限制關係,分別是:
1.a
aa比b
bb至少多種c
cc單位的作物。
2.a
aa比b
bb至多多種c
cc單位的作物。
3.a
aa和b
bb的作物數相等。
求問是否滿足這樣的一種情形,符合所有的限制關係。
不妨記f(∗
)f(*)
f(∗)
表示∗
*∗的作物數,顯然各條件等價於:
1.f (a
)−f(
b)≥c
f(a)-f(b)\geq c
f(a)−f
(b)≥
c2.f(b
)−f(
a)≥−
cf(b)-f(a)\geq-c
f(b)−f
(a)≥
−c3.f (a
)−f(
b)≥0
,f(b
)−f(
a)≥0
f(a)-f(b)\geq0,f(b)-f(a)\geq0
f(a)−f
(b)≥
0,f(
b)−f
(a)≥
0對於每個不等式,後者向前者連邊,然後求最長路。出現正環對應無解。
注意:求最長路的時候,各個點應該設定為負無窮,而不是0。
#include
using
namespace std;
typedef
long
long ll;
const
int inf=
0x3f3f3f3f
;const
int n=
1e4+7;
struct edge
;vector go[n]
;int dis[n]
,cnt[n]
;bool inq[n]
;int n,m;
bool
spfa()
}}}}
return1;
}int
main()
);}else
if(opt==2)
);}else);
go[b]
.push_back()
;}}for
(int i=
1;i<=n;i++
) go[0]
.push_back()
;bool ans=
spfa()
;if(ans)
puts
("yes");
else
puts
("no");
return0;
}
洛谷P1993 小K的農場 差分約束
小k在mc裡面建立很多很多的農場,總共n n個,以至於他自己都忘記了每個農場中種植作物的具體數量了,他只記得一些含糊的資訊 共m m個 以下列三種形式描述 但是,由於小k的記憶有些偏差,所以他想要知道存不存在一種情況,使得農場的種植作物數量與他記憶中的所有資訊吻合。顯然差分約束。條件1 a b c ...
洛谷P1993 小K的農場
小k在mc裡面建立很多很多的農場,總共n個,以至於他自己都忘記了每個農場中種植作物的具體數量了,他只記得一些含糊的資訊 共m個 以下列三種形式描述 但是,由於小k的記憶有些偏差,所以他想要知道存不存在一種情況,使得農場的種植作物數量與他記憶中的所有資訊吻合。輸入格式 第一行包括兩個整數 n 和 m,...
洛谷P1993 小K的農場
這道題的實質是差分約束。我們逐個分析。設 a 農場中有 d a 個單位植物,b 農場為 d b 對於第一點,則滿足 d a d b geq c 變形下就變成 d b d a leq c 對於第二點 d a d b leq c 對於第三點 d a d b 即 d a d b 0 變成不等式就要同時滿足...