Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Edmonds_Karp算法 网络流_最大流

Posted by su03121231 at 2013-08-02 16:29:32 on Problem 1273
/* poj1273 网络流_最大流
题意:给m个关系,n点,求1到n的最大流
Edmonds_Karp算法
*/
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int n,m;
int cap[210][210];//残余流量
int E_K(int s,int t)
{
	int flow[210][210];//已用流量;
	int f=0,a[210],p[210];
	queue<int> q;
	memset(flow,0,sizeof(flow));
	while(1)
	{
		memset(a,0,sizeof(a));
		a[s]=INT_MAX;
		q.push(s);
		while(!q.empty())
		{
			int u=q.front();
			q.pop();
			for(int v=1;v<=n;v++)
			{
				if(!a[v] && cap[u][v]>flow[u][v])
				{
					q.push(v);
					a[v]=a[u]<cap[u][v]-flow[u][v]?a[u]:cap[u][v]-flow[u][v];
					p[v]=u;
				}
			}
		}
		if(a[t]==0)
			break;
		for(int u=t;u!=s;u=p[u])
		{
			flow[p[u]][u]+=a[t];
	     	flow[u][p[u]]-=a[t];
		}
		f+=a[t];
	}
	return f;
}
int main()
{
	int i,from,to,w;
	while(scanf("%d%d",&m,&n)!=EOF)
	{
		memset(cap,0,sizeof(cap));
		for(i=0;i<m;i++)
		{
			scanf("%d%d%d",&from,&to,&w);
			cap[from][to]+=w;//可能有重边,需叠加
		}
		printf("%d\n",E_K(1,n));
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator