pku 1459 Power Network EK&&Dinic算法解决。
2012-03-17 11:21
218 查看
http://poj.org/problem?id=1459
才开始套自己的那个模板就是过不了一直TLE,最后看了别人过得修改了一下自己的模板最后1391s险过。。。
本题是一个多源点,多汇点问题,建立超级源点与汇点,然后套用模板求解。。
EK O(V*E^2)
View Code
才开始套自己的那个模板就是过不了一直TLE,最后看了别人过得修改了一下自己的模板最后1391s险过。。。
本题是一个多源点,多汇点问题,建立超级源点与汇点,然后套用模板求解。。
EK O(V*E^2)
View Code
#include <cstdio> #include <cstring> #include <iostream> #include <queue> #define maxn 107 #define inf 99999999 using namespace std; int g[maxn][maxn],level[maxn]; bool vt[maxn]; //分层 bool layer(int s,int e) { queue<int>q; memset(level,-1,sizeof(level)); q.push(s); level[s] = 1; int i,p; while (!q.empty()) { p = q.front(); q.pop(); for (i = 0; i <= e; ++i) { if (g[p][i] > 0 && level[i] == -1)//满足还没有分层,且p与i有流量 { level[i] = level[p] + 1; if (i == e) { return true;} else q.push(i); } } } return false; } int dinic(int s,int e) { deque<int>q;//利用双端队列 int i,p,vs,ve,min,pos,sum; sum = 0; while (layer(s,e)) { memset(vt,false,sizeof(vt)); q.push_back(s);//从后端插入 vt[s] = true; while (!q.empty()) { p = q.back();//从后端取值 if (p == e)//如果得到了终点 { min = inf; for (i = 1; i < q.size(); ++i) { vs = q[i - 1]; ve = q[i]; if (g[vs][ve] > 0 && g[vs][ve] < min) { min = g[vs][ve]; pos = vs; } } sum += min; for (i = 1; i < q.size(); ++i) { vs = q[i - 1]; ve = q[i]; if (g[vs][ve] > 0) { g[vs][ve] -= min; g[ve][vs] += min; } } while (!q.empty() && q.back() != pos)//返回最小流量的边的定点,重新找增广路 { vt[q.back()] = false; q.pop_back(); } } else//继续找下一层 { for (i = 0; i <= e; ++i) { if (g[p][i] > 0 && !vt[i] && level[i] == level[p] + 1) { vt[i] = true; q.push_back(i); break; } } if (i > e) q.pop_back(); } } } return sum; } int main() { int i,n,m,np,nc; int x,y,v; while (~scanf("%d%d%d%d",&n,&np,&nc,&m)) { memset(g,0,sizeof(g)); for (i = 0; i < m; ++i) { scanf(" (%d,%d)%d",&x,&y,&v); g[x][y] = v; } for (i = 0; i < np; ++i) { scanf(" (%d)%d",&x,&v); g [x] = v; } for (i = 0; i < nc; ++i) { scanf(" (%d)%d",&x,&v); g[x][n + 1] = v; } printf("%d\n",dinic(n,n+1)); } return 0; }
相关文章推荐
- poj 1459 Power Network : 最大网络流 dinic算法实现
- POJ 1459 Power Network【最大流基础题 EK 算法】
- POJ1459-Power Network-网络流-最大流(EK模板题)
- poj1459 Power Network --- 最大流 EK/dinic
- POJ-1459-Power Network(网络流 EK)
- POJ 1459 & ZOJ 1734 Power Network (网络最大流)
- POJ 1459 && ZOJ 1734--Power Network【最大流dinic】
- poj 1459 Power Network : 最大网络流 dinic算法实现
- poj&nbsp;1459&nbsp;power&nbsp;network(网络流&nbsp;di…
- poj 1459 Power Network 【多源多汇最大流经典问题 dinic算法】
- poj1459 Power Network --- 最大流 EK/dinic
- 《网络流学习笔记03&&POJ1459 &&ZOJ 1734 Power Network(多源点,多汇点)》
- Power Network(网络流最大流 & dinic算法 + 优化)
- poj1459(Power Network + EK)
- poj 1459 Power Network (dinic算法)
- poj&nbsp;1459&nbsp;power&nbsp;network(网络流&nbsp;sa…
- PKU1459 Power Network - 最大流
- POJ 1459 PowerNetwork 多源点网络流入门(EK算法求最大流)
- POJ 1459 Power Network 经典网络流构图问题 最大流,EK算法、Dinic算法、ISAP算法
- pku 1459 Power Network(最大流)