网络流板子
来源:互联网 发布:墨西哥菜 知乎 编辑:程序博客网 时间:2024/06/05 05:11
#include<iostream>#include<cstdio>#include<vector>#include<queue>#include<cstring> #define ll long long#define inf 10000001 using namespace std; struct node{ int to,num;}edge[11000],edge1[11000]; int n,m;int s,e;int pn=1;vector<int>v[11000];int edgenum=0;int d[11000]; void link(int x,int y,int z){ node t; t.to=y; t.num=z; edge[edgenum]=t; v[x].push_back(edgenum); edgenum++; t.to=x; t.num=0; edge[edgenum]=t; v[y].push_back(edgenum); edgenum++;} bool bfs(){ memset(d,0,sizeof(d)); d[s]=1; queue<int>q; q.push(s); while(!q.empty()){ int t=q.front(); q.pop(); if(t==e)continue; for(int i=0; i<v[t].size(); i++){ int x=v[t][i]; int to=edge[x].to; int num=edge[x].num; if(num==0 || d[to]!=0)continue; d[to]=d[t]+1; q.push(to); } } if(d[e]!=0)return true; return false;} ll dfs(int x,int y){ if(x==e || y==0)return y; ll sum=0; for(int i=0; i<v[x].size(); i++){ int j=v[x][i]; int to=edge[j].to; int num=edge[j].num; if(num){ if(d[to]!=d[x]+1)continue; ll k=dfs(to,min(num,y)); y-=k; sum+=k; edge[j].num-=k; edge[j^1].num+=k; if(y==0)break; } } if(sum==0)d[x]=0; return sum;} long long ans=0; int main(){ scanf("%d%d",&n,&m); for(int i=1; i<=m; i++){ int x,y,z; scanf("%d%d%d",&x,&y,&z); link(x,y,z); } s=1; e=n; while(bfs())ans+=dfs(s,inf); printf("%lld\n",ans); return 0;}
阅读全文
0 0
- 网络流板子
- 网络流板子之 dinic板子
- 网络流板子(良心)
- poj 1273 网络流板子题
- 纪念板子能连上网络
- 草地排水 (码一下自己的网络流板子)
- 网络流衍生物——有上下界网络流の板子
- 最大流板子
- 板子
- 板子
- 开启android板子的adb网络连接
- 最大流的一些板子
- 最大流板子(Sap)
- 实验室使用板子的ubuntu10.04虚拟机的网络配置
- 关于S3C2440板子和电脑的网络连线
- WINCE下s3c2410+cs8900 板子的网络问题解决
- 2016北京网络赛 NTT板子(附上素数表)
- 最小费用最大流(板子)
- hive on spark的安装实现
- 第十七节:switch_to.active_element 获取当前焦点元素
- 1.工厂模式
- Selenium:元素等待的4种方法
- CodeForces
- 网络流板子
- POJ 2236
- setTimeout 去实现 setInterval
- ESXI6.0新添加硬盘未能格式化成功
- Bounding-Box(BB)regression
- 几道程序
- 性能测试篇(2)-监控Linux服务器资源
- XMind入门教程
- chapter14_1图像的缩放与平移