poj 1273 最大流入门
2024-10-18 20:30:17
明天再拍一遍
#include <iostream>
#include <queue>
using namespace std;
const int N = ;
const int INF = 0x7FFFFFFF;
int n,m,map[N][N],path[N],flow[N],start,end;
queue<int> q;
int bfs()
{
int i,t;
while(!q.empty()) q.pop();
memset(path,-,sizeof(path));
path[start]=,flow[start]=INF;
q.push(start);
while(!q.empty())
{
t=q.front();
q.pop();
if(t==end) break;
for(i=;i<=m;i++)
{
if(i!=start && path[i]==- && map[t][i])
{
flow[i]=flow[t]<map[t][i]?flow[t]:map[t][i];
q.push(i);
path[i]=t;
}
}
}
if(path[end]==-) return -;
return flow[m]; //一次遍历之后的流量增量
}
int Edmonds_Karp()
{
int max_flow=,step,now,pre;
while((step=bfs())!=-)
{ //找不到增路径时退出
max_flow+=step;
now=end;
while(now!=start)
{
pre=path[now];
map[pre][now]-=step; //更新正向边的实际容量
map[now][pre]+=step; //添加反向边
now=pre;
}
}
return max_flow;
}
int main()
{
int i,u,v,cost;
while(scanf("%d %d",&n,&m)!=EOF)
{
memset(map,,sizeof(map));
for(i=;i<n;i++)
{
scanf("%d %d %d",&u,&v,&cost);
map[u][v]+=cost; //not just only one input
}
start=,end=m;
printf("%d\n",Edmonds_Karp());
}
return ;
}
最新文章
- Android 中关于ListView分割线的设置
- HDU2544 最短路dij
- 奇妙的动态代理:EF中返回的对象为什么序列化失败
- for 循环
- [bzoj1296][SCOI2009]粉刷匠(泛化背包)
- [原]Fedora 20的yum配置
- C++ 输入输出文件流(ifstream&;ofstream)
- 常用Oracle SQL语句(汇总版)
- 关于matlab鼠标响应
- (Problem 35)Circular primes
- gitLab添加ssh key
- 【Socket计划】使用C++实现Server结束Client结束
- HTML 相同name 传递一个数组
- 嵌入式linux下wifi网卡的使用(四)——应用程序sub_supplicant编译
- JS基础:基于原型的对象系统
- RestTemplate的设置及使用
- Linux必备150个命令
- 【Android】Android 代码判断是否获取ROOT权限(一)
- Mongo数据库操作/数据库版本号
- 转载:C# 将引用的DLL文件放到指定的目录下