Poj 1459 Power Network
2013-05-07 21:13
281 查看
几乎就是裸的最大流
对于多源点多汇点的最大流问题,只需要虚拟一个总源点总汇点即可
虽然之前在读题的时候想到了
这样描述出来是被题解第一行剧透的。。。
orz
1Y
用的是1273ditch的EK模板
1273就不放上来了,太水了。。。
对于多源点多汇点的最大流问题,只需要虚拟一个总源点总汇点即可
虽然之前在读题的时候想到了
这样描述出来是被题解第一行剧透的。。。
orz
1Y
用的是1273ditch的EK模板
1273就不放上来了,太水了。。。
#include<stdio.h> #include<algorithm> #include<queue> #define INF (int)1e9 #define N 510 #define FOR(i,a,b) for(i=a;i<=b;i++) using namespace std; int G ; int ft ; bool visit ; int n,np,nc,m; int res; bool EK(int src,int des){ queue<int>Q;while(!Q.empty())Q.pop(); int i; FOR(i,0,n+1)visit[i]=0; Q.push(src);visit[src]=0; while(!Q.empty()){ int tp=Q.front();Q.pop(); FOR(i,0,n+1){ if(!visit[i]&&G[tp][i]){ ft[i]=tp; Q.push(i); visit[i]=1; if(i==des)return 1; } } } return 0; } void FF(int src,int des){ res=0; while(1){ if(!EK(src,des))break; int run=INF,tp=des; while(tp!=src){ run=min(run,G[ft[tp]][tp]); tp=ft[tp]; } tp=des; while(tp!=src){ G[ft[tp]][tp]-=run; G[tp][ft[tp]]+=run; tp=ft[tp]; } res+=run; } } int main(){ while(scanf("%d%d%d%d",&n,&np,&nc,&m)!=EOF){ int i,j,x,y,c; char s[1010]; FOR(i,0,n+1)FOR(j,0,n+1)G[i][j]=0; FOR(i,1,m){ scanf("%s",s); sscanf(s,"(%d,%d)%d",&x,&y,&c); x++;y++; G[x][y]+=c; } FOR(i,1,np){ scanf("%s",s); sscanf(s,"(%d)%d",&y,&c); y++; G[0][y]+=c; } FOR(i,1,nc){ scanf("%s",s); sscanf(s,"(%d)%d",&x,&c); x++; G[x][n+1]+=c; } FF(0,n+1); printf("%d\n",res); } return 0; }
相关文章推荐
- POJ-1459 Power Network
- 【网络流】 POJ 1459 Power Network
- POJ 1459 Power Network
- poj 1459 && zoj 1734 Power Network
- 【网络流】 POJ 1459 Power Network
- POJ 1459 Power Network
- Power Network - poj 1459 (最大流 Edmonds-Karp算法)
- Hoj 1228/Poj 1459 Power Network
- Power Network - POJ 1459 - 网络流
- poj 1459 Power Network
- POJ 1459 Power Network
- POJ 1459 Power Network
- POJ 1459 Power Network
- poj1459 Power Network
- poj1459——Power Network
- [POJ 1459] Power Network
- 最大流-POJ-1459-Power Network
- poj 1459 Power Network
- 初涉网络流 POJ 1459 Power Network
- POJ-1459 Power Network