poj 1459 最大流
2013-12-04 19:25
288 查看
#include "stdio.h" //poj 1459 最大流 #include "string.h" #include "queue" using namespace std; #define N 205 #define INF 0x3fffffff int n; bool mark; int map ,maxf ,route ; int EK(); int BFS(); void init(); int MIN(int x,int y); int main() { int i,j; char ch; int m,np,nc; int u,v,w; while(scanf("%d%d%d%d",&n,&np,&nc,&m)!=-1) { init(); while(m--) { scanf(" (%d,%d)%d",&u,&v,&w); if(u==v) continue; map[u+1][v+1] += w; } int start = 0; //超级源点 while(np--) { scanf(" (%d)%d",&v,&w); map[start][v+1] += w; } int end = n+1; //超级汇点 while(nc--) { scanf(" (%d)%d",&u,&w); map[u+1][end] += w; } int ans = EK(); printf("%d\n",ans); } return 0; } void init(){ memset(map,0,sizeof(map)); } int MIN(int x,int y) { return x<y?x:y; } int EK() { int ans=0,kejia; int x,y; while(kejia = BFS()) { ans += kejia; y = n+1; while(y!=0) { x = route[y]; map[x][y]-=kejia; map[y][x]+=kejia; y = x; } } return ans; } int BFS() { int i; int x,y; memset(route,-1,sizeof(route)); for(i=0;i<N;i++) maxf[i] = INF; queue<int> q; route[0] = 0; q.push(0); while(!q.empty()) { x = q.front(); q.pop(); for(y=0;y<=n+1;y++) { if(route[y]==-1 && map[x][y]!=0) { maxf[y] = MIN(maxf[x],map[x][y]); route[y] = x; q.push(y); } } } if(route[n+1]==-1) return 0; return maxf[n+1]; }
相关文章推荐
- 1017:期末成绩
- Python 标准库 urllib2 的使用细节(转)
- 二进制的转化
- poj2528(离散化,线段树成段覆盖)
- 在JAR包中使用log4j
- 1016:计算利息
- 关于 jsp servlet 将Excel表格内容写进数据库,将数据库导出到Excel中。(一)
- window server 2008 支持多人登录(中文图解)
- 复习及总结--.Net线程篇(3)
- 百度笔试题:找最小的不重复数
- /usr/libexec/mysqld: Can’t create/write to file ‘/tmp/’ (Errcode: 13)
- 黑马程序员:Java编程_语法基础
- 基于蓝牙4.0的蓝牙打印机 低耗电蓝牙 BLE (Bluetooth Low Energy)
- 在博客园使用 MarkDown写blog
- 1012:外币兑换
- CPtrList操作(插入,删除特定元素,删除全部)
- Spring核心技术阐述(IOC、DI、AOP)
- Java备忘录模式(Memento)
- UVa 11028 Sum of Product (A007773,你懂的)
- windows server 2008 设置多用户同时远程登录(图解一)