poj 1273 Drainage Ditches 网络最大流

来源:互联网 发布:excel数据设置下拉选项 编辑:程序博客网 时间:2024/05/09 22:51

很直白的网络最大流,我第一次好好做网络流,费整整一天呀!菜呀~~奋斗

代码如下:

#include<iostream>#include<queue>using namespace std;const int Max=205;const int inf=99999999;int n,m,ans;int map[Max][Max],pre[Max];bool vis[Max];int min(int a,int b){return a<b ? a:b;}bool bfs()                           //寻找增广路径{queue<int> que;que.push(1);                     memset(vis,0,sizeof(vis));      vis[1]=true;                     while(!que.empty())              {int u=que.front();           if(u==n) return true;        que.pop();                   for(int i=1;i<=n;i++)        if(!vis[i] && map[u][i]){pre[i]=u;          que.push(i);         vis[i]=true;         }}return false;}void end()                           //end注满增广路径{int i,sum=inf;for(i=n;i!=1;i=pre[i])sum=min(sum,map[pre[i]][i]);//找出一条权值最小的路径for(i=n;i!=1;i=pre[i]){map[pre[i]][i]-=sum;          //求出每条边的残留量map[i][pre[i]]+=sum;         //逆的边要再增加}ans+=sum;}int main()                            {int u,v,w;while(cin>>m>>n){memset(map,0,sizeof(map));ans=0;while(m--){cin>>u>>v>>w;map[u][v]+=w;             //可能出现重边。}while(bfs()) end();cout<<ans<<endl;}return 0;}



 

原创粉丝点击