POJ 1459 Power Network 最大流水题
来源:互联网 发布:backtrack5软件下载 编辑:程序博客网 时间:2024/06/06 05:20
sap模板题,输入比较麻烦,漏了个分号检查了半天
View Code
#include<stdio.h>#include<string.h>#include<algorithm>#define maxn 105#define INF 100000000using namespace std;int c[maxn][maxn],dis[maxn],num[maxn];int pre[maxn];int s, t, vs;int n, m, np,nc;void sap(){ memset(dis,0,sizeof(dis)); memset(num,0,sizeof(num)); vs=n+2;num[0]=vs; int u = pre[s]=s,maxf=0,aug=INF,v; while(dis[s] < vs) {loop: for(v=0;v<vs;v++) { if(c[u][v]>0&&dis[u]==dis[v]+1) { aug = min(aug,c[u][v]); pre[v] = u; u = v; if(u == t) { for(u=pre[u];v!=s;v=u,u=pre[u]) { c[u][v] -= aug; c[v][u] += aug; } maxf += aug; aug = INF; } goto loop; } } int mind=vs; for(v=0;v<vs;v++) { if(c[u][v]>0&&mind>dis[v]) { mind=dis[v]; } } if(!(--(num[dis[u]])))break; ++num[dis[u]=mind+1]; u=pre[u]; } printf("%d\n",maxf);}int main(){ int x, y, z; while(~scanf("%d%d%d%d",&n,&np,&nc,&m)) { int i=0; s=n;t=n+1; memset(c,0,sizeof(c)); while(i<m) { while(getchar()!='(');//漏个分号伤不起啊 scanf("%d,%d)%d",&x, &y, &z); c[x][y]+=z; i++; } i=0; while(i<np) { while(getchar()!='(');//漏个分号伤不起啊 scanf("%d)%d",&y,&z); c[s][y]+=z; i++; } i=0; while(i<nc) { while(getchar()!='(');//漏个分号伤不起啊 scanf("%d)%d",&y,&z); c[y][t] +=z; i++; } sap(); } return 0;}
View Code
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define maxn 105#define maxm 10005#define inf 1000000000int min(int a, int b){ return a < b ? a : b;}struct E{ int v, next, c;}edge[maxm << 2];int head[maxn], tot;int n, m, np, nc;void add(int s, int t, int c){ edge[tot].v = t; edge[tot].c = c; edge[tot].next = head[s]; head[s] = tot++; edge[tot].v = s; edge[tot].c = 0; edge[tot].next = head[t]; head[t] = tot++;}void init(){ tot = 0; memset(head, -1, sizeof(head));}int gap[maxn], dis[maxn], pre[maxn], cur[maxn];int sap(int s, int t, int vs){ memset(gap, 0, sizeof(gap)); memset(dis, 0, sizeof(dis)); gap[0] = vs; memcpy(cur, head, sizeof(head)); int i, u = pre[s] = s, maxf = 0, aug = inf, v; while(dis[s] < vs) {loop: for(i = head[u]; i != -1; i = edge[i].next) { v = edge[i].v; if(edge[i].c > 0 && dis[u] == dis[v] + 1) { aug = min(aug, edge[i].c); pre[v] = u; cur[u] = i; u = v; if(u == t) { for(u = pre[u]; v != s; v = u, u = pre[u]) { edge[cur[u]].c -= aug; edge[cur[u]^1].c += aug; } maxf += aug; aug = inf; } goto loop; } } int min_d = vs; for(i = head[u]; i != -1; i = edge[i].next) { v = edge[i].v; if(edge[i].c > 0 && dis[v] < min_d) min_d = dis[v]; } if( !(--gap[dis[u]])) break; ++gap[dis[u] = min_d + 1]; u = pre[u]; } return maxf;}int main(){ int i, j; while( ~scanf("%d%d%d%d", &n, &np, &nc, &m)) { int S = n, T = n+1; init(); while(m--) { int x, y, z; while( getchar() != '('); scanf("%d,%d)%d", &x, &y, &z); add(x, y ,z); } i = 0; while(np--) { int x, y; while( getchar() != '('); scanf("%d)%d", &x, &y); add(S, x, y); } while(nc--) { int x, y; while( getchar() != '('); scanf("%d)%d", &x, &y); add(x, T, y); } printf("%d\n", sap(S, T, n+2)); } return 0;}
- POJ 1459 Power Network 最大流水题
- POJ 1459 Power Network【最大流基础题 EK 算法】
- poj 1459 Power Network 最大流,模板题
- (最大流) poj 1459 Power Network
- POJ--1459[Power Network] 网络最大流
- POJ-1459 Power Network【最大流】
- POJ 1459 Power Network 最大流
- poj 1459 Power Network(最大流)
- poj 1459 Power Network 最大流建图练习
- poj 1459 Power Network(最大流)
- Poj 1459 Power Network 最大流
- poj 1459 Power Network, 最大流,多源多汇
- POJ 1459 Power Network(最大流)
- POJ 1459 :Power Network:最大流算法
- POJ 1459 Power Network (最大流)
- 【最大流】POJ-1459 Power Network
- poj 1459 Power Network (网络最大流)
- poj 1459 Power Network(最大流)
- POJ 2513 Colored Sticks 并查集 + 字典树 + 欧拉回路
- POJ 1724 ROADS 最短路 邻接表 + bfs +优先队列
- hdu 4027 Can you answer these queries?
- POJ 1149 PIGS 最大流
- POJ 2112 Optimal Milking 二分+floyd+最大流
- POJ 1459 Power Network 最大流水题
- POJ 1087 A Plug for UNIX 最大流
- POJ 2559 Largest Rectangle in a Histogram DP
- POJ 2537 Tight words DP
- ssh action中service无法注入,报空指针问题
- POJ 1745 Divisibility 类似0-1背包DP
- POJ 2385 Apple Catching DP
- POJ 1837 Balance 0-1背包
- 背包九讲(转载)