poj 1273Drainage Ditches 最大流
来源:互联网 发布:长沙芙蓉网络花店 编辑:程序博客网 时间:2024/05/16 08:38
分析:此题从1即为S,m即为t.求最大流。但是输入可能有重复,这里很关键。因为没注意重边导致WA了。这个题目很经典,可以用EK,FF,DINIC求最大流。
代码:
#include<iostream>
#include<queue>
using namespace std;
int net[210][210],m,n,pre[210];
queue<int>q;
bool bfs()
{
int v,i;
bool visit[210];
int flow[210];
memset(flow,-1,sizeof(flow));
memset(visit,0,sizeof(visit));
while(!q.empty()) q.pop();
q.push(1);
visit[1]=true;
flow[1]=(1<<30);pre[1]=1;
while(!q.empty())
{
v=q.front();
q.pop();
for(i=1;i<=n;i++)
if(!visit[i]&&net[v][i])
{
flow[i]=flow[v]<net[v][i]?flow[v]:net[v][i];
q.push(i);
visit[i]=true;
pre[i]=v;
}
}
if(flow[n]==-1) return 0;
return flow[n];
}
int Edmonds_Karp()
{
int _min,total=0;
while(_min=bfs())
{
int np=n,pp;
while(np!=1)
{
pp=pre[np];
net[pp][np]-=_min;
net[np][pp]+=_min;
np=pp;
}
total+=_min;
}
return total;
}
int main()
{
int i,x,y,z;
while (scanf("%d%d",&m,&n)!=EOF)
{
int x,y,R;
memset(net,0,sizeof(net));
for (int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
scanf("%d",&R);// pay attention to!
net[x][y]+=R;
}
printf("%d\n",Edmonds_Karp());
}
return 0;
}
- poj 1273 Drainage Ditches 网络最大流
- 【最大流】北大 poj 1273 Drainage Ditches
- POJ-1273 Drainage Ditches【最大流】
- poj 1273 Drainage Ditches--最大流--Dinic
- poj 1273Drainage Ditches 最大流
- poj 1273 Drainage Ditches--最大流--sap
- poj 1273 Drainage Ditches---maxflow最大流
- poj - 1273 - Drainage Ditches(最大流)
- poj 1273 Drainage Ditches(最大流)
- poj-1273 Drainage Ditches 最大流
- POJ 1273 Drainage Ditches 最大流
- poj 1273 Drainage Ditches (最大流Dinic)
- POJ 1273 Drainage Ditches 最大流
- POJ 1273 Drainage Ditches(最大流)
- POJ 1273 Drainage Ditches 最大流 dinic
- POJ 1273 Drainage Ditches 最大流
- POJ 1273 Drainage Ditches (网络最大流)
- poj 1273 最大流 Drainage Ditches
- each实质上是一个for循环,那么能不能像普通的for循环那样break和continue呢?
- linux文件的三种时间属性
- 互斥量(mutex)
- Java开发快捷键介绍
- 二叉树的遍历(递归和非递归)
- poj 1273Drainage Ditches 最大流
- cygwin daemon
- Get 与 Post 的区别
- 苹果应用商店审核指南
- CentOS安装zip unzip命令
- 匿名内部类 是否可以继承其它类,是否可以实现接口
- IBM InforMix 开发-架构-分析管理测试题
- Const,Const函数,Const变量,函数后面的Const (zz)
- 黑马程序员——Java类加载器