POJ 1273

 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 }

关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。 

技术网站地址: vmfor.com

原文地址:https://www.cnblogs.com/gavinsp/p/4563348.html