标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 12771 Accepted Submission(s): 6097
题意:给出n个河流,m个点,以及每个河流的流量,求从1到m点的最大流量。
没啥好说的,裸的最大流,试了一下模板,注意模板的下标。。。
#include <cstdio> #include <iostream> #include <sstream> #include <cmath> #include <cstring> #include <cstdlib> #include <string> #include <vector> #include <map> #include <set> #include <queue> #include <stack> #include <algorithm> using namespace std; #define ll long long #define _cle(m, a) memset(m, a, sizeof(m)) #define repu(i, a, b) for(int i = a; i < b; i++) #define repd(i, a, b) for(int i = b; i >= a; i--) #define sfi(n) scanf("%d", &n) #define pfi(n) printf("%d\n", n) #define sfi2(n, m) scanf("%d%d", &n, &m) #define pfi2(n, m) printf("%d %d\n", n, m) #define pfi3(a, b, c) printf("%d %d %d\n", a, b, c) #define MAXN 105 #define V 55 //const int INF = 0x3f3f3f3f; #define maxn 210 const int inf = 0x3f3f3f3f; struct EK { int cap[maxn][maxn]; int flow[maxn][maxn]; int n; void init(int n) { this->n = n; memset(cap, 0, sizeof(cap)); } void addCap(int i, int j, int val) { cap[i][j] += val; } int solve(int source, int sink) { if(source == sink) return inf;///源=汇, 流量无穷大! static int que[maxn], pre[maxn], d[maxn]; ///bfs时的队列; bfs时某点的前驱; 增光路径的流量 int p, q, t;///bfs时的队列底、顶; bfs时当前元素 memset(flow, 0, sizeof(flow)); while(true) { memset(pre, 255, sizeof(pre)); d[source] = inf; p = q = 0; que[q++] = source; while(p<q && pre[sink]==-1) { t = que[p ++]; for(int i = 1; i <= n; i ++) { if(pre[i]==-1 && cap[t][i]-flow[t][i]>0) { ///残余=cap-flow pre[i] = t; que[q++]=i; d[i] = min(d[t], cap[t][i]-flow[t][i]); } } //pfi(1000); } if(pre[sink]==-1) break;///没有增广路径了! for(int i = sink; i != source; i = pre[i]) { flow[pre[i]][i] += d[sink]; flow[i][pre[i]] -= d[sink]; } } t = 0;///当做网络流量 for(int i = 1; i <= n; i ++) { t += flow[source][i]; //pfi(flow[source][i]); } return t; } }ek; int main() { int n, m; while(~sfi2(m, ek.n)) { ek.init(ek.n); int x, y, z; repu(i, 0, m) { sfi2(x, y), sfi(z); ek.addCap(x, y, z); } pfi(ek.solve(1, ek.n)); } return 0; }
标签:
原文地址:http://www.cnblogs.com/sunus/p/4820753.html