首页 > 其他 > 详细

poj3469 DINIC模板

时间:2014-03-12 08:48:16      阅读:530      评论:0      收藏:0      [点我收藏+]

昨天写最大获利 的时候惊奇的发现我的dinic模板竟然挂了。。。

现在刚刚调对。。。。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#define MAX 600100
#define inf 0x7fffffff

using namespace std;

int n,m;
struct dinic
{
	struct Edge
	{
		int from,to,cap,filp;
	};
	vector<int>g[MAX];
	vector<Edge>edge;

	void add_edge(int From,int To,int Cap,int Cap_)
	{
		edge.push_back((Edge){From,To,Cap,0});
		edge.push_back((Edge){To,From,Cap_,0});
		int mm=edge.size();
		g[From].push_back(mm-2);
		g[To].push_back(mm-1);
	}
	
	int s,t;
	int cur[MAX];
	int dis[MAX];
	int done[MAX];

	bool bfs()
	{
		memset(done,0,sizeof(done));
		queue<int> q;
		q.push(s);
		done[s]=1;
		dis[s]=0;
		while(!q.empty())
		{
			int now=q.front();
			q.pop();
			for(int w=0;w<g[now].size();w++)
			{
				Edge &e=edge[g[now][w]];
				if(done[e.to]==0&&e.cap>e.filp)
				{
					done[e.to]=1;
					dis[e.to]=dis[now]+1;
					q.push(e.to);
				}
			}
		}
		return done[t];
	}

	int dfs(int x,int a)
	{	
		if(x==t||a==0)
			return a;
		int flow=0,f;
		for(int &w=cur[x];w<g[x].size();w++)
		{
			Edge &e=edge[g[x][w]];
			if(dis[e.to]==dis[x]+1&&(f=dfs(e.to,min(a,e.cap-e.filp)))>0)
			{
				e.filp+=f;
				edge[g[x][w]^1].filp-=f;
				flow+=f;
				a-=f;
				if(!a)
					break;
			}
		}
		return flow;
	}

	int maxfile(int S,int T)
	{
		this->s=S;
		this->t=T;
		int answer=0;
		while(bfs())
		{
			memset(cur,0,sizeof(cur));
			answer+=dfs(s,inf);
		}
		return answer;
	}
}solve;

int main()
{
	scanf("%d%d",&n,&m);
	int s,t;
	s=0;
	t=n*2+1;
	for(int i=1;i<=n;i++)
	{
		int a1,a2;
		scanf("%d%d",&a1,&a2);
		solve.add_edge(s,i,a1,0);
		solve.add_edge(i,t,a2,0);
	}
	for(int i=1;i<=m;i++)
	{
		int a1,a2,a3;
		scanf("%d%d%d",&a1,&a2,&a3);
		solve.add_edge(a1,a2,a3,a3);
	}
	int answer=solve.maxfile(s,t);
	printf("%d\n",answer);
	return 0;
}

poj3469 DINIC模板,布布扣,bubuko.com

poj3469 DINIC模板

原文:http://blog.csdn.net/wbysr/article/details/21063095

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!