洛谷P4001 狼抓兔子 網路流

2021-09-24 01:42:08 字數 2266 閱讀 9105

現在小朋友們最喜歡的"喜羊羊與灰太狼",話說灰太狼抓羊不到,但抓兔子還是比較在行的,而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對下面這樣乙個網格的地形:

左上角點為(1,

1)(1,1)

(1,1

),右下角點為(n,

m)(n,m)

(n,m

)(上圖中n=3

,m=4

n=3,m=4

n=3,m=

4)。有以下三種型別的道路

( x,

y)<==

>(x

+1,y

)(x,y)<==>(x+1,y)

(x,y

)<==

>(x

+1,y)(x

,y)<==

>(x

,y+1

)(x,y)<==>(x,y+1)

(x,y

)<==

>(x

,y+1)(x

,y)<==

>(x

+1,y

+1)(x,y)<==>(x+1,y+1)

(x,y

)<==

>(x

+1,y

+1)道路上的權值表示這條路上最多能夠通過的兔子數,道路是無向的. 左上角和右下角為兔子的兩個窩,開始時所有的兔子都聚集在左上角(1,

1)(1,1)

(1,1

)的窩裡,現在它們要跑到右下角(n,

m)(n,m)

(n,m

)的窩中去,狼王開始伏擊這些兔子.當然為了保險起見,如果一條道路上最多通過的兔子數為k

kk,狼王需要安排同樣數量的k

kk只狼,才能完全封鎖這條道路,你需要幫助狼王安排乙個伏擊方案,使得在將兔子一網打盡的前提下,參與的狼的數量要最小。因為狼還要去找喜羊羊麻煩。

最小割等於最大流。

然後就是一道板子題了。注意這道題的邊是雙向的,所以反向邊和正向邊的流量是一樣的。

點數1 06

10^6

106,最好加上當前弧優化。

#include

#include

#include

#include

#include

using

namespace std;

const

int n=

1000010

,inf=

1e9;

int n,m,tot=

1,s,t,maxflow,head[n]

,cur[n]

,dep[n]

;bool vis[n]

;struct edge

e[n*6]

;intc(

int x,

int y)

intread()

void

add(

int from,

int to,

int flow)

bool

bfs()}

}return dep[t]

}int

dfs(

int x,

int flow)

int used=0;

for(

int i=cur[x]

;~i;i=e[i]

.next)}}

return used;

}void

dinic()

intmain()

for(

int i=

1;i)for

(int j=

1;j<=m;j++

)for

(int i=

1;i)for

(int j=

1;j)add

(s,1

,inf)

;add(1

,s,0);

add(

c(n,m)

,t,inf)

;add

(t,c

(n,m),0

);dinic()

;printf

("%d"

,maxflow)

;return0;

}

洛谷P4001 狼抓兔子 網路流

現在小朋友們最喜歡的 喜羊羊與灰太狼 話說灰太狼抓羊不到,但抓兔子還是比較在行的,而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對下面這樣乙個網格的地形 左上角點為 1,1 1 1 右下角點為 n,m n m 上圖中n 3 m 4 n 3,m 4 有以下三種型別的道路 x y x 1,y...

P4001 BJOI2006 狼抓兔子

不少題解都是用網路流來做最小割 網路流是什麼 但對於乙個不會網路流的蒟蒻來做這題相當困難。聽機房daolao說可以重構圖做最短路。然後就baidu將平面圖轉換成乙個對偶圖,因為網路流的最小割 對偶圖的最短路,所以只要在對偶圖上跑最短路 從左上角跑到右下角 就行了。由於堆優化的dijkstra寫炸了,...

BJOI2006 狼抓兔子(網路流)

現在小朋友們最喜歡的 喜羊羊與灰太狼 話說灰太狼抓羊不到,但抓兔子還是比較在行的,而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對下面這樣乙個網格的地形 左上角點為 1,1 右下角點為 n,m 上圖中n 3,m 4 有以下三種型別的道路 1 x,y x 1,y 2 x,y x,y 1 3...