hdu 4289(最小割最大流定理)
生活随笔
收集整理的這篇文章主要介紹了
hdu 4289(最小割最大流定理)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:有N個城市,現在城市S出現了一伙歹徒,他們想運送一些炸彈到D城市,不過警方已經得到了線報知道他們的事情,不過警察不知道他們所在的具體位置,所以只能采取封鎖城市的辦法來阻斷暴徒,不過封鎖城市是需要花費一定代價的,由于警局資金比較緊張,所以想知道如果完全阻斷暴徒從S城市到達D城市的最小需要花費的代價。
解題思路:這道題目還是難在建圖,如果我們仔細分析這道題的話,它要求的是最小的花費使得s點與d點不連通。。如果熟悉最小割最大流定理的話,那么這個題目又可以轉化到網絡流的問題上來。。此外,這道題目的費用是在頂點上,而普通的網絡流的容量都是在邊上,所以又是拆點,把每個點都拆成兩份,之間連一條費用邊。。。最后要求最小割就是求最大流。。好題!
AC:
#include<stdio.h> #include<algorithm> #include<queue> #include<string.h> using namespace std;const int MAXN = 505; const int oo = 1e8+7;struct Edge{int v, flow, next;}edge[MAXN*MAXN]; int Head[MAXN], cnt; int layer[MAXN];///分層void InIt() {cnt = 0;memset(Head, -1, sizeof(Head)); } void AddEdge(int u, int v, int flow) {edge[cnt].v = v;edge[cnt].flow = flow;edge[cnt].next = Head[u];Head[u] = cnt++;swap(u, v);edge[cnt].v = v;edge[cnt].flow = 0;edge[cnt].next = Head[u];Head[u] = cnt++; } bool bfs(int start, int End) {queue<int> Q;Q.push(start);memset(layer, 0, sizeof(layer));layer[start] = 1;while(Q.size()){int u = Q.front();Q.pop();if(u == End)return true;for(int j=Head[u]; j!=-1; j=edge[j].next){int v = edge[j].v;if(layer[v] == false && edge[j].flow){layer[v] = layer[u] + 1;Q.push(v);}}}return false; } int dfs(int u, int MaxFlow, int End) {if(u == End)return MaxFlow;int uflow = 0;for(int j=Head[u]; j!=-1; j=edge[j].next){int v = edge[j].v;if(layer[v]==layer[u]+1 && edge[j].flow){int flow = min(MaxFlow-uflow, edge[j].flow);flow = dfs(v, flow, End);edge[j].flow -= flow;edge[j^1].flow += flow;uflow += flow;if(uflow == MaxFlow)break;}}if(uflow == 0)layer[u] = 0;return uflow; } int dinic(int start, int End) {int MaxFlow = 0;while(bfs(start, End) == true)MaxFlow += dfs(start, oo, End);return MaxFlow; }int main() {int N, M;while(scanf("%d%d", &N, &M) != EOF){int i, u, v, cost, start, End;InIt();scanf("%d%d", &start, &End);for(i=1; i<=N; i++){scanf("%d", &cost);AddEdge(i, i+N, cost);}while(M--){scanf("%d%d", &u, &v);AddEdge(u+N, v, oo);AddEdge(v+N, u, oo);}printf("%d\n", dinic(start, End+N));}return 0; }
總結
以上是生活随笔為你收集整理的hdu 4289(最小割最大流定理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端工作流程自动化——Grunt/Gul
- 下一篇: 微盟合作,重磅推出全免费的H5专业营销平