最大流

Posted 幻觉czw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大流相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<queue>
#include<climits>
using namespace std;
#define SIZE 200
int pre[SIZE];
bool visit[SIZE];
int flow[SIZE];
int capacity[SIZE][SIZE];
queue<int>Q;
int min(int a,int b)

	return a<b ? a:b;

int bfs(int s,int t)

	memset(visit,0,sizeof(visit));
	memset(flow,0,sizeof(flow));
	memset(pre,0,sizeof(pre));
	visit[s]=true;
	flow[s]=INT_MAX;
	Q.push(s);
	while(!Q.empty())
    
		int tmp=Q.front();
		Q.pop();
		if(tmp==t)break;
		for(int i=s;i<=t;++i)
		
			if(!visit[i] && capacity[tmp][i]>0)
			
				pre[i]=tmp;
				visit[i]=true;
				flow[i]=min(capacity[tmp][i],flow[tmp]);
				Q.push(i);
			
		
	
	if(flow[t]==0)return false;
	else return flow[t];

int Maxflow(int s,int t)

	int increase=0;
	int sum=0;
	while(increase=bfs(s,t)!=0)
	
		int k=t;
		while(k!=s)
		
			int last=pre[k];
			capacity[last][k]-=flow[t];
			capacity[k][last]+=flow[t];
			k=last;
		
		sum+=flow[t];
	
	return sum;

int main()

	memset(capacity,0,sizeof(capacity));
	capacity[0][1]=16;
	capacity[0][2]=13;
	capacity[1][0]=-16;
	capacity[1][2]=10;
	capacity[1][3]=12;
	capacity[2][1]=4;
	capacity[2][3]=-9;
        capacity[2][4]=14;
	capacity[3][1]=-12;
	capacity[3][2]=9;
	capacity[3][4]=-7;
	capacity[3][5]=20;
	capacity[4][2]=-14;
	capacity[4][3]=7;
	capacity[4][5]=4;
	capacity[5][3]=-20;
	capacity[5][4]=-4;
	bfs(0,5);
	cout<<Maxflow(0,5);
	return 0;

以上是关于最大流的主要内容,如果未能解决你的问题,请参考以下文章

最大流问题

网络最大流学习随笔,详解网络流最大流

最小费用最大流模板

洛谷 P4014 分配问题 最小费用最大流+最大费用最大流

网络流Dinic(本篇介绍最大流)

网络流知识点汇总