| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 56869 | Accepted: 21862 |
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 <algorithm>
#include <stdio.h>
#include <queue>
#include <string.h>
using namespace std;
const int maxn=202;
const int inf=0x3f3f3f3f;
int mp[maxn][maxn];
bool vis[maxn];
int pre[maxn];
int n,m;
int s,e;
bool bfs()
{
queue<int>q;
memset(vis,0,sizeof(vis));
vis[s]=1;
q.push(s);
while(!q.empty())
{
int first=q.front();
if(first==e)
return true;
q.pop();
for(int i=1;i<=n;i++)
{
if(!vis[i]&&mp[first][i])
{
q.push(i);
vis[i]=1;
pre[i]=first;
}
}
}
return false;
}
int max_flow()
{
int ans=0;
while(1)
{
if(!bfs())
return ans;
int Min=inf;
for(int i=e;i!=s;i=pre[i])
Min=min(Min,mp[pre[i]][i]);
for(int i=e;i!=s;i=pre[i])
{
mp[pre[i]][i]-=Min;
mp[i][pre[i]]+=Min;
}
ans+=Min;
}
}
int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
memset(mp,0,sizeof(mp));
int u,v,c;
while(m--)
{
scanf("%d%d%d",&u,&v,&c);
mp[u][v]+=c;
}
s=1,e=n;
printf("%d\n",max_flow());
}
return 0;
}
[ACM] POJ 1273 Drainage Ditches (最大流)
原文地址:http://blog.csdn.net/sr_19930829/article/details/39545505