EK算法网络流模板hdu1532
2016-09-28 11:41
344 查看
hdoj 1532是一道可以作为模板题目练手。
模板代码:
[cpp] view
plain copy
print?
#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
const int N = 1100;
const int INF = 0x3f3f3f3f;
struct Node
{
int to;//终点
int cap; //容量
int rev; //反向边
};
vector<Node> v
;
bool used
;
void add_Node(int from,int to,int cap) //重边情况不影响
{
v[from].push_back((Node){to,cap,v[to].size()});
v[to].push_back((Node){from,0,v[from].size()-1});
}
int dfs(int s,int t,int f)
{
if(s==t)
return f;
used[s]=true;
for(int i=0;i<v[s].size();i++)
{
Node &tmp = v[s][i]; //注意
if(used[tmp.to]==false && tmp.cap>0)
{
int d=dfs(tmp.to,t,min(f,tmp.cap));
if(d>0)
{
tmp.cap-=d;
v[tmp.to][tmp.rev].cap+=d;
return d;
}
}
}
return 0;
}
int max_flow(int s,int t)
{
int flow=0;
for(;;){
memset(used,false,sizeof(used));
int f=dfs(s,t,INF);
if(f==0)
return flow;
flow+=f;
}
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(v,0,sizeof(v));
for(int i=0;i<n;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add_Node(x,y,z);
}
printf("%d\n",max_flow(1,m));
}
}
模板代码:
[cpp] view
plain copy
print?
#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
const int N = 1100;
const int INF = 0x3f3f3f3f;
struct Node
{
int to;//终点
int cap; //容量
int rev; //反向边
};
vector<Node> v
;
bool used
;
void add_Node(int from,int to,int cap) //重边情况不影响
{
v[from].push_back((Node){to,cap,v[to].size()});
v[to].push_back((Node){from,0,v[from].size()-1});
}
int dfs(int s,int t,int f)
{
if(s==t)
return f;
used[s]=true;
for(int i=0;i<v[s].size();i++)
{
Node &tmp = v[s][i]; //注意
if(used[tmp.to]==false && tmp.cap>0)
{
int d=dfs(tmp.to,t,min(f,tmp.cap));
if(d>0)
{
tmp.cap-=d;
v[tmp.to][tmp.rev].cap+=d;
return d;
}
}
}
return 0;
}
int max_flow(int s,int t)
{
int flow=0;
for(;;){
memset(used,false,sizeof(used));
int f=dfs(s,t,INF);
if(f==0)
return flow;
flow+=f;
}
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(v,0,sizeof(v));
for(int i=0;i<n;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add_Node(x,y,z);
}
printf("%d\n",max_flow(1,m));
}
}
相关文章推荐
- 网络流初步——增广路算法(EK)模板
- 【网络流算法模板】最大流:dinic模板
- 增广路算法(网络流) HDU1532 Drainage Ditches
- 【网络流之最大流】HDU3549Flow Problem【EK模板】
- 网络流算法模板
- hdu1532 Drainage Ditches (网络流入门)&(EK算法模板)
- POJ 1273-Drainage Ditches(网络流_最大流_ISAP()算法和EK()算法)
- Dinic 算法hdu1532(转给自己做模板)
- 网络流——增广路算法(dinic)模板 [BeiJing2006]狼抓兔子
- 最大流DFS(EK)算法模板
- POJ 1459 PowerNetwork 多源点网络流入门(EK算法求最大流)
- POJ 1459 网络流算法(EK)
- 网络流算法总汇(ek,dinic,isap)
- POJ1459-Power Network-网络流-最大流(EK模板题)
- EK(BFS)求最大流的算法模板(邻接表)
- 【最大流之ek算法】HDU1532 求最大流
- 初识网络流(EK and Dinic 模板)
- HDOJ1532 最大流 BFS + EK 算法 模板
- 网络流之EK 算法
- Drainage Ditches--hdu1532(网络流 模板)