poj 1273 Drainage Ditches 经典网络流 Dinic算法
2016-02-27 21:01
555 查看
题意:m个点,n条有向边,求从源点1到汇点m的最大流量;
用了Dinic算法写了一遍,回溯的过程是关键,刚开始掌握不好怎么回溯更新,看了网上大神的题解才豁然开朗;
用了Dinic算法写了一遍,回溯的过程是关键,刚开始掌握不好怎么回溯更新,看了网上大神的题解才豁然开朗;
#include <iostream> #include<cstdio> #include<cstring> #include<cmath> #include<queue> #define INF 0x7fffffff using namespace std; int e[220][220],m,n,layer[220]; bool bfs() { queue<int> q; memset(layer,0,sizeof(layer)); q.push(1); layer[1]=1; while(!q.empty()) { int t=q.front(); q.pop(); for(int i=1;i<=m;i++) if(!layer[i]&&e[t][i]>0) layer[i]=layer[t]+1,q.push(i); } return layer[m]==0; } int dfs(int s,int u) { if(s==m) return u; int tmp=u; for(int i=1;i<=m&&tmp;i++) { if(layer[s]+1==layer[i]&&e[s][i]>0) { int t=dfs(i,min(e[s][i],tmp)); e[s][i]-=t; e[i][s]+=t; tmp-=t; } } return u-tmp; } int dinic() { int ans=0,t=0; while(!bfs()) while(t=dfs(1,INF)) ans+=t; return ans; } int main() { while(~scanf("%d%d",&n,&m)) { memset(e,0,sizeof(e)); for(int i=1;i<=n;i++) { int a,b,val; cin>>a>>b>>val; e[a][b]+=val; } cout<<dinic()<<endl; } }
相关文章推荐
- atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty HttpListener
- atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty HttpListener
- atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty HttpListener
- 深度学习材料:从感知机到深度网络A Deep Learning Tutorial: From Perceptrons to Deep Networks
- 深度学习材料:从感知机到深度网络A Deep Learning Tutorial: From Perceptrons to Deep Networks
- HDU 3549 网络最大流再试
- 关于AsyncHttpClient的cz.msebera.android.httpclient.Header
- POJ 1273 网络流(最大流)模板
- 中国计算机学会CCF推荐国际学术会议和期刊目录-网络与信息安全
- 中国计算机学会CCF推荐国际学术会议和期刊目录-计算机网络
- OKHttp 如何支持 HttpDns
- 关于Tcp封包
- Connection timed out: connect. If you are behind an HTTP proxy, please configure the proxy settings
- 深度学习系列(3.2)——神经网络-sigmoid 神经元
- 广师Android群分享之网络
- AngularJs的$http发送POST请求,php无法接收Post的数据解决方案
- http://iframe.ip138.com/ic.asp
- http://iframe.ip138.com/ic.asp
- RTP、RTCP、RTSP之区别
- Android 一个改进的okHttp封装库