标签:des style blog http color os io strong
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 55893 | Accepted: 21449 |
Description
Input
Output
Sample Input
5 4 1 2 40 1 4 20 2 4 20 2 3 30 3 4 10
Sample Output
50
Source
#include<iostream> #include<cstdio> #include<cstring> #include<limits> #include<queue> #include<algorithm> using namespace std; int flow[205][205],a[205],f[205],mx[205][205]; int n,m; void pre() { int u,v,value; memset(mx,0,sizeof(mx)); for(int i=0;i<n;i++){ cin>>u>>v>>value; mx[u][v]+=value; } } int solve() { int ans=0; memset(flow,0,sizeof(flow)); queue<int> q; while(1){ q.push(1); memset(a,0,sizeof(a)); memset(f,0,sizeof(f)); a[1]=INT_MAX;//每次都从起点出发 while(!q.empty()){//每走一趟流 得到路径中最小的单条弧的流量 加入到总流量中 int u=q.front(); q.pop(); for(int v=1;v<=m;v++){ if(!a[v]&&mx[u][v]>flow[u][v]){//如果前面的路径不为空 并且当前的最大容量仍然大于已经流过该条渠道的流量 a[v]=min(a[u],mx[u][v]-flow[u][v]);//选取最小的 f[v]=u;//将路径的父节点记录下来 方便更新流 q.push(v);//将可行的节点压入栈中 } } } if(!a[m]) return ans ;//如果找了一遍 最小的弧仍然是0 说明可行的流已经走完了 for(int v=m;v!=1;v=f[v]){//不断找路径的父节点 flow[f[v]][v]+=a[m];//将流量已经走过的 记录上去 flow[v][f[v]]-=a[m];//反向的天上负 } ans+=a[m];//将该条流的流量 即最小值 加上 } } int main(void) { while(cin>>n>>m){ pre(); cout<<solve()<<endl; } return 0; }
POJ 1273 Drainage Ditches(网络流 最大流),布布扣,bubuko.com
POJ 1273 Drainage Ditches(网络流 最大流)
标签:des style blog http color os io strong
原文地址:http://www.cnblogs.com/woshijishu3/p/3905566.html