标签:des style color os io strong for ar
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
红果果的网络流,Edmonds-Karp 最短增广路算法。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <queue>
#include <algorithm>
using namespace std;
#define maxe 210
int n,m,G[maxe][maxe],PreSta[maxe];
bool visit[maxe];
void init()
{
	int temp,from,to;
	memset(G,0,sizeof(G));
	for(int i=0;i<n;i++)
	{
		scanf("%d %d %d",&from,&to,&temp);
		G[from][to]+=temp;
	}
	return ;
}
int Augment()
{
	queue<int> Q;
	memset(visit,0,sizeof(visit));
	memset(PreSta,0,sizeof(PreSta));
	Q.push(1);
	visit[1]=1;
	bool findPath=0;
	while (!Q.empty())
	{
		int v=Q.front();
		Q.pop();
		for(int i=1;i<=m;i++)
		{
			if(G[v][i]>0&&visit[i]==0)
			{
				PreSta[i]=v;
				visit[i]=1;
				if(i==m)
				{
					findPath=1;
					while(!Q.empty())
					{
						Q.pop();
					}
					break;
				}
				else {
					Q.push(i);
				}
			}
		}
	}
	if(!findPath) return 0;
	int minflow=999999999;
	int tp=m;
	while(PreSta[tp])
	{
		minflow=min(minflow,G[PreSta[tp]][tp]);
		tp=PreSta[tp];
	}
	tp=m;
	while (PreSta[tp])
	{
		G[PreSta[tp]][tp]-=minflow;
		G[tp][PreSta[tp]]+=minflow;
		tp=PreSta[tp];
	}
	return minflow;
}
void slove()
{
	int ans=0;
	int a;
	while (a=Augment())
	{
		ans+=a;
		
	}
	printf("%d\n",ans);
	
	
}
int main()
{
	//freopen("data.in","r",stdin);
	while (scanf("%d %d",&n,&m)!=EOF)
	{
		init();
		slove();
	}
	return 0;
}POJ 1273 Drainage Ditches 网络流基础,布布扣,bubuko.com
POJ 1273 Drainage Ditches 网络流基础
标签:des style color os io strong for ar
原文地址:http://blog.csdn.net/alpc_paul/article/details/38553005