最大流问题

来源:互联网 发布:网络机顶盒软件大片 编辑:程序博客网 时间:2024/05/27 14:14
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <cmath>#include <climits>#include <cstdlib>#include <ctime>#include <stack>using namespace std;//freopen("out.txt","w",stdout);//freopen("in.txt","r",stdin);//ios::sync_with_stdio(false);const int INF = 100000007;int c[1000][1000];int flow[1000][1000];int s,t;int a[1000];int p[1000];int n,m;int ans;void fun(){queue<int> q;while(1){memset(a,0,sizeof(a));a[s] = INF;q.push(s);while(!q.empty()){int u  = q.front();q.pop();for(int v= 1;v <= n;v++){if(!a[v] && c[u][v] > flow[u][v]){p[v] = u;q.push(v);a[v] = min(a[u],c[u][v] - flow[u][v]);}}}if(a[t] == 0){break;}for(int u = t; u != s;u = p[u]){flow[p[u]][u] += a[t];flow[u][p[u]] -= a[t]; }ans += a[t];}}int  main(){while(cin >> n >> m){memset(flow,0,sizeof(flow));memset(c,0,sizeof(c));ans = 0;for(int i = 0;i < m;i++){int x,y,tm;cin >> x >> y >> tm;c[x][y] = tm;}cin >> s >> t;fun();printf("%d\n",ans);}return 0; }/*6 101 2 161 3 132 3 103 2 42 4 123 5 144 3 95 4 75 6 44 6 201 6*/

0 0
原创粉丝点击