ZJOI2009狼和羊的故事 dinic網路流

2021-07-26 08:53:53 字數 760 閱讀 1374

題意就是任意兩個1和2都不能有路徑相連通。

做法是最小割,但是暴力增廣會t4個點,而dinic沒記cur陣列會t2個點,開了以後速度飛快。。。。。。

#include#include#include#includeusing namespace std;

const int maxn=105,maxn=maxn*maxn,inf=1e9,dir[4][2]=,,,};

int a[maxn][maxn],dep[maxn],cur[maxn];

int begin[maxn],next[maxn*10],to[maxn*10],p[maxn*10],e=1;

void add(int u,int v,int flow)

queueq;

bool bfs(int s,int t)

return (dep[t]>0);

}int dfs(int u,int t,int maxflow)

return 0;

}int main()

for(int i=1;i<=n;i++)

for(int j=1;j<=m;j++)

if(a[i][j]!=2)

for(int k=0;k<4;k++)

int ans=0,res;

while(bfs(0,n*m+1))

printf("%d\n",ans);

return 0;

}

呵呵,很有意思吧。

ZJOI2009 狼和羊的故事

點此看題 考查網路流的建圖,要把羊和狼分割開來,很容易想到最小割問題,下面講一下建圖的方法 然後我們的圖就建出來了,這時候跑最大流就是答案。include include include include define inf 0x3f3f3f3f const int maxn 10005 using...

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...