點此看題
考查網路流的建圖,要把羊和狼分割開來,很容易想到最小割問題,下面講一下建圖的方法:
然後我們的圖就建出來了,這時候跑最大流就是答案。
#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...