BZOJ3436 小K的農場

2021-08-30 21:42:06 字數 2172 閱讀 4495

差分約束系統。

分析一下三種情況:

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個單位的作物,農場...