ZJOI2009 狼和羊的故事

2021-10-01 09:22:38 字數 1172 閱讀 3542

點此看題

考查網路流的建圖,要把羊和狼分割開來,很容易想到最小割問題,下面講一下建圖的方法:

然後我們的圖就建出來了,這時候跑最大流就是答案。

#include

#include

#include

#include

#define inf 0x3f3f3f3f

const

int maxn =

10005

;using

namespace std;

intread()

int n,m,s,t,tot=

1,ans,f[maxn]

,cur[maxn]

,dis[maxn]

;int dx[4]

=,dy[4]

=,a[

105]

[105];

queue<

int> q;

struct edge

e[maxn*10]

;int

cal(

int x,

int y)

void

add_edge

(int u,

int v,

int c)

,f[u]

=tot;

e[++tot]

=edge

,f[v]

=tot;

}int

bfs()}

}if(!dis[t]

)return0;

return1;

}int

dfs(

int u,

int ept)

}return flow;

}int

main()

for(

int i=

1;i<=n;i++

)for

(int j=

1;j<=m;j++

)for

(int k=

0;k<

4;k++

) s=

1;t=

cal(n,m)+2

;while

(bfs()

)printf

("%d\n"

,ans)

;}

ZJOI2009 狼和羊的故事

solution 考慮 1 和 2 相鄰是必須要長度為 1 的籬笆,所以只需考慮 1,2 和 0 之間要不要放籬笆,用 s 連向所有的 1 所有的 2 連向 t 現在問題是要使 s 與 t 不連通,這不是經典的最小割問題嗎?code include include includeusing name...

題解 ZJOI2009 狼和羊的故事

題目戳我 text 顯然思路,把所有羊看成乙個源點,所有狼看成乙個匯點,格仔之間連容量為 1 的邊,直接跑最小割。技巧 這題收穫 注意到無限邊在最小割中特殊的意義。includeusing namespace std define int long long const int maxn 5e5 1...

ZJOI2009狼和羊的故事 dinic網路流

題意就是任意兩個1和2都不能有路徑相連通。做法是最小割,但是暴力增廣會t4個點,而dinic沒記cur陣列會t2個點,開了以後速度飛快。include include include includeusing namespace std const int maxn 105,maxn maxn ma...