HDU 1273 最大流模版题

T了两发,这题居然卡vector ?或者我姿势不对。。。写了个邻接矩阵。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxv = 203;
 4 const int INF = 0x3f3f3f3f;
 5 int n, m;
 6 int G[maxv][maxv];
 7 int a[maxv];
 8 int p[maxv];
 9 
10 int Maxflow(int s, int t) {     // source and terminate
11     int flow = 0, pre, now;
12     for(;;) {
13         memset(a, 0, sizeof(a));
14         memset(p, -1, sizeof(p));
15         queue<int> Q;
16         Q.push(s);
17         a[s] = INF, p[s] = 0;
18         while(!Q.empty()) {
19             int x = Q.front(); Q.pop();
20             for(int i = 1; i <= m; i++) {
21                 if(i != s && p[i] == -1 && G[x][i]) {
22                     a[i] = min(a[x],G[x][i]);
23                     Q.push(i);
24                     p[i] = x;
25                 }
26                 //cout << i << ' ';
27             }
28             if(a[t]) break;
29         }
30         //cout << a[t] << endl;
31         if(!a[t]) break;
32         now = t;
33         while(now != s) {
34             pre = p[now];
35             G[pre][now] -= a[t];
36             G[now][pre] += a[t];
37             now = pre;
38         }
39         flow += a[t];
40     }
41     return flow;
42 }
43 
44 int main() {
45     int s, e, c;
46     int ans;
47     while(cin >> n >> m) {
48         memset(G, 0, sizeof(G));
49         for(int i = 0; i < n; i++) {
50             scanf("%d%d%d",&s,&e,&c);
51             G[s][e] += c;
52         }
53         ans = Maxflow(1,m);
54         printf("%d\n",ans);
55     }
56     return 0;
57 }
View Code

 

posted @ 2018-09-26 14:16  BluefishNT  阅读(84)  评论(0)    收藏  举报