网络流(最大流)Ford_Fulkerson算法 白书
Posted huangzzz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络流(最大流)Ford_Fulkerson算法 白书相关的知识,希望对你有一定的参考价值。
网络中有两台计算机s和t ,现在想从s传输数据到t 该网络中一共有n太计算机 其中一些计算机之间炼油一条单向的通信线缆都对应的一秒钟内所能传输的最大数据量,当其他计算机之间没有数据传输是,在一秒内s最多可以传输多少数据到t
5 7
0 1 10
0 2 2
1 2 6
1 3 6
3 2 3
2 4 5
3 4 8
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<queue> #include<set> #include<algorithm> #include<map> #define maxn 200005 typedef long long ll; #define inf 1000000009 int x,y,num; using namespace std; struct edge{ int to,cap,rev; //边的终点,容量,反向边 }; vector<edge>mp[maxn]; // 邻接图 bool vis[maxn]; void add_edge(int from,int to,int cap) //建图 { mp[from].push_back((edge){to,cap,mp[to].size()}); mp[to].push_back((edge){from,0,mp[from].size()-1}); //反向弧 } int dfs(int v,int t,int f) //找增广路 v,t是最终点 用了f的流量 { if(v==t)return f; vis[v]=true; for(int i=0;i<mp[v].size();i++) { edge &e=mp[v][i]; if(!vis[e.to]&&e.cap>0) { int d=dfs(e.to,t,min(f,e.cap)); //遍历所有的路径 if(d>0) { e.cap-=d; //求增加的流量 mp[e.to][e.rev].cap+=d; return d; } } } return 0; } int max_flow(int s,int t) { int flow=0; for(;;) { memset(vis,0,sizeof(vis)); //初始化 int f=dfs(s,t,inf); if(f==0)return flow; flow+=f; } } int main() { int n,m; cin>>n>>m; for(int i=0;i<m;i++) { cin>>x>>y>>num; add_edge(x,y,num); } int ans=max_flow(0,4); cout<<ans<<endl; return 0; }
以上是关于网络流(最大流)Ford_Fulkerson算法 白书的主要内容,如果未能解决你的问题,请参考以下文章