标签:
1 #include<iostream> 2 #include<stdio.h> 3 #define big_num 1000000000 4 #define MAXN 250 5 #include"queue" 6 using namespace std; 7 8 int _m[MAXN][MAXN]; 9 int Ford_fulkerson(int m, int s, int t, int &F,int g[][MAXN]); 10 int find_path(int m, int s,int t,int pre[MAXN],int g[][MAXN]); 11 12 int main() 13 { 14 //freopen("acm.acm","r",stdin); 15 int p; 16 int s; 17 int i; 18 int j; 19 int w; 20 int m; 21 int n; 22 while(cin>>s>>p) 23 { 24 memset(_m,0,sizeof(_m)); 25 // memset(pre,0,sizeof(pre)); 26 for(i = 0; i < s; ++ i) 27 { 28 cin>>m>>n; 29 cin>>w; 30 _m[m-1][n-1] += w; 31 } 32 int F = 0; 33 while(Ford_fulkerson(p,0,p-1,F,_m)); 34 cout<<F<<endl; 35 } 36 system("PAUSE"); 37 } 38 ///////////////////////////////////////////////////////////// 39 //网络流(Ford_fulkerson算法)自己写的模板~ 40 //#define big_num 1000000000 41 //#include"queue" 42 //int _m[MAXN][MAXN]; 43 ///////////////////////////////////////////////////////////// 44 int find_path(int m, int s,int t,int pre[MAXN],int g[][MAXN]) 45 { 46 queue<int> q; 47 int * mark = new int[m]; 48 memset(mark,0,sizeof(int)*m); 49 int x; 50 mark[s] = 1; 51 int i; 52 q.push(s); 53 while(!q.empty()) 54 { 55 x = q.front(); 56 for(i = 0; i < m; i++) 57 { 58 if(g[x][i] > 0 && mark[i] == 0) 59 { 60 mark[i] = 1; 61 pre[i] = x; 62 if(i == t) 63 return 1; 64 q.push(i); 65 } 66 } 67 q.pop(); 68 } 69 delete [] mark; 70 return 0; 71 } 72 int Ford_fulkerson(int n, int s, int t, int &F,int g[][MAXN]) 73 { 74 int i; 75 int min; 76 int * pre = new int[n]; 77 if(find_path(n,s,t,pre, g) == 0) 78 { 79 delete [] pre; 80 return 0; 81 } 82 min = big_num; 83 for(i = t; i != s; i = pre[i]) 84 if(g[pre[i]][i] < min) 85 { 86 min = g[pre[i]][i]; 87 } 88 for(i = t; i != s; i = pre[i]) 89 { 90 g[pre[i]][i] -= min; 91 g[i][pre[i]] += min; 92 } 93 F += min; 94 delete []pre; 95 return 1; 96 }
标签:
原文地址:http://www.cnblogs.com/gavinsp/p/4563348.html