洛谷P1993 小K的農場 差分約束

2021-09-29 10:08:41 字數 1490 閱讀 7217

對於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 變成不等式就要同時滿足...