洛谷3376 网络最大流
来源:互联网 发布:jdk 7u80 windows x32 编辑:程序博客网 时间:2024/05/22 17:28
题目描述
如题,给出一个网络图,以及其源点和汇点,求出其网络最大流。 输入输出格式 输入格式:
第一行包含四个正整数N、M、S、T,分别表示点的个数、有向边的个数、源点序号、汇点序号。
接下来M行每行包含三个正整数ui、vi、wi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为wi)
输出格式:
一行,包含一个正整数,即为该网络的最大流。
最大流模板题。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int oo=0x3f3f3f3f;int m,n,s,t,fir[10010],ne[200010],to[200010],w[200010],f[10010],que[100010];int rd(){ int x=0; char c=getchar(); while (c<'0'||c>'9') c=getchar(); while (c>='0'&&c<='9') { x=x*10+c-'0'; c=getchar(); } return x;}void add(int num,int u,int v,int x){ ne[num]=fir[u]; fir[u]=num; to[num]=v; w[num]=x;}void init(){ int i,u,v,x; n=rd(); m=rd(); s=rd(); t=rd(); for (i=1;i<=m;i++) { u=rd(); v=rd(); x=rd(); add(i*2,u,v,x); add(i*2+1,v,u,0); }}bool find(){ int hd=1,tl=1,u,v,i; memset(f,0,sizeof(f)); f[s]=1; que[1]=s; while (hd<=tl) { u=que[hd++]; for (i=fir[u];i;i=ne[i]) if (w[i]&&!f[v=to[i]]) { f[v]=f[u]+1; que[++tl]=v; } } return f[t];}int dfs(int u,int lim){ if (u==t) return lim; int i,v,x; int ret=0; for (i=fir[u];i&&ret<lim;i=ne[i]) if (w[i]&&f[v=to[i]]==f[u]+1) { x=dfs(v,min(lim-ret,w[i])); w[i]-=x; w[i^1]+=x; ret+=x; } if (!ret) f[u]=0; return ret;}int main(){ init(); int x,ans=0; while (find()) while (x=dfs(s,oo)) ans+=x; printf("%d\n",ans);}
0 0
- 洛谷3376 网络最大流
- 洛谷 3376_[模板]网络最大流
- 洛谷 P3376【模板】网络最大流
- 洛谷P3376【模板】网络最大流
- 洛谷 P3376 【模板】网络最大流
- 网络流--最大流
- 最大流(网络流)
- 网络流 最大流
- 网络流最大流
- 网络流 最大流
- 网络流-最大流
- 网络流--最大流
- 网络流-最大流
- 网络流 最大流
- 网络流-最大流
- 网络流,最大流
- 最大网络流
- 最大网络流
- 串行通讯
- LeetCode 299. Bulls and Cows
- 计算机键盘快捷键用法
- 51nod 1305 Pairwise Sum and Divide
- Hdu 4008 Parent and son(给你一棵树(n<=1e5),有Q次查询,每次输入X Y,意思是以X为根,输出Y的儿子节点中节点标号最小和子树中标号最小)
- 洛谷3376 网络最大流
- JQuery插件之-----Datatables(四)render与日期转换(moment.js)
- 51nod 1315 合法整数集
- C语言链式结构表2
- Gym - 101142F Folding(折半)
- 51nod 1316 回文矩阵
- php处理我的关注和关注我的
- 51nod 1319 跳跃游戏
- Android NDK for Eclipse