poj1273【最大流入门】

原创 2016年05月31日 21:07:24

Drainage Ditches
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 67890   Accepted: 26235

Description

Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by water for awhile and takes quite a long time to regrow. Thus, Farmer John has built a set of drainage ditches so that Bessie's clover patch is never covered in water. Instead, the water is drained to a nearby stream. Being an ace engineer, Farmer John has also installed regulators at the beginning of each ditch, so he can control at what rate water flows into that ditch.
Farmer John knows not only how many gallons of water each ditch can transport per minute but also the exact layout of the ditches, which feed out of the pond and into each other and stream in a potentially complex network.
Given all this information, determine the maximum rate at which water can be transported out of the pond and into the stream. For any given ditch, water flows in only one direction, but there might be a way that water can flow in a circle.

Input

The input includes several cases. For each case, the first line contains two space-separated integers, N (0 <= N <= 200) and M (2 <= M <= 200). N is the number of ditches that Farmer John has dug. M is the number of intersections points for those ditches. Intersection 1 is the pond. Intersection point M is the stream. Each of the following N lines contains three integers, Si, Ei, and Ci. Si and Ei (1 <= Si, Ei <= M) designate the intersections between which this ditch flows. Water will flow through this ditch from Si to Ei. Ci (0 <= Ci <= 10,000,000) is the maximum rate at which water will flow through the ditch.

Output

For each case, output a single integer, the maximum rate at which water may emptied from the pond.

Sample Input

5 4
1 2 40
1 4 20
2 4 20
2 3 30
3 4 10

Sample Output

50

题意:

有n个池塘(从1到n开始编号,1为源点,n为汇点),m条水渠,给出这m条水渠端点和所能流过的最大流量,

求从源点到汇点能流过的最大流量。(1->n);



超级水的最大流问题

Dinic算法

当成模板啦~


#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <queue>

#define maxn 105
#define INF 0x3f3f3f3f
using namespace std;

struct Edge{
	int from,to,cap,flow;
};

struct Dinic {
	int n,m,s,t;
	vector<Edge> edges;
	vector<int> G[maxn];		//邻接表 
	bool vis[maxn];				//BFS使用 
	int d[maxn];				//从起点到i的距离 
	int cur[maxn];				//当前弧下标 
	
	void init(int n){
		this->n=n;
		for(int i=1;i<=n;i++) 	G[i].clear();
		edges.clear();
	}
	
	void AddEdge(int from, int to, int cap){
		edges.push_back( (Edge){from,to,cap,0} );
		edges.push_back( (Edge){from,to,cap,0} );
		m=edges.size();
		G[from].push_back(m-2);
		G[to].push_back(m-1);
	}
	
	bool BFS(){
		memset(vis,0,sizeof(vis));
		queue<int> Q;
		Q.push(s);
		d[s]=0;
		vis[s]=1;
		while(!Q.empty()){
			int x=Q.front();	Q.pop();
			for(int i=0;i<G[x].size();i++){
				Edge &e= edges[G[x][i]];
				if(!vis[e.to]&&e.cap>e.flow){	//只考虑残量网络中的图 
					vis[e.to]=1;
					d[e.to]=d[x]+1;
					Q.push(e.to); 
				}
			}
		}
		return vis[t];
	} 
	int DFS(int x,int a){
		if(x==t||a==0)	return a;
		int flow=0,f;
		for(int &i = cur[x];i<G[x].size();i++){
			Edge &e =edges[G[x][i]];
			if(d[x]+1==d[e.to]&&(f=DFS(e.to,min(a,e.cap-e.flow))>0)){
				e.flow+=f;
				edges[G[x][i]^1].flow-=f;
				flow+=f;
				a-=f;
				if(a==0)	break;
			}
		}
		return flow;
	} 
	
	int Maxflow(int s,int t){
		this->s=s;
		this->t=t;
		int flow=0;
		while(BFS()){
			memset(cur,0,sizeof(cur));
			flow+=DFS(s,INF);
		}
		return flow;
	}


	vector<int> Mincut(){		//最小割割边 
		BFS();
		vector<int> v;
		for(int i=0;i<edges.size();i++){
			Edge &e=edges[i];
			if(vis[e.from] && !vis[e.to] && e.cap>0)	
				v.push_back(i);
		} 
		return v;
	}
};


Dinic solver;
int main(){
	int n,m;
	while(scanf("%d%d",&m,&n)!=EOF){	//边,点 
		solver.init(n);
		int x,y,z;
		for(int i=0;i<m;i++){
			scanf("%d%d%d",&x,&y,&z);
			solver.AddEdge(x,y,z);
		} 
		int ans=solver.Maxflow(1,n);
		printf("%d\n",ans);
	} 
	
	
	return 0;
} 









版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

POJ 1273 最大流入门题 Edmonds_Karp算法

Edmonds_Karp算法步骤: 循环{ 初始化 寻找增广路 没有则退出 根据增广路,更新flow } #include #include #include #inc...

NYOJ 323 && HDU 1532 && POJ 1273 Drainage Ditches (网络流之最大流入门)

链接:click here 题意:给出n个河流,m个点,以及每个河流的流量,求从1到m点的最大流量。 思路:最裸的网络流题目  意思就是求从源点到汇点的最大流。 第一道网络流,一边看着书上的介绍,一...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

poj 1273 Drainage Ditches 网络流最大流入门 ford-fulkerson

Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 70072 ...

POJ 1273 Drainage Ditches 最大流入门题

一道基础的网络流中的最大流问题 题目链接:http://poj.org/problem?id=1273 利用最大流定理:残留网络上找不到增广路径,则当前流为最大流;反之,如果当前流不为最大流,则一...

POJ 1273 Drainage Ditches(最大流入门)

POJ 1273 Drainage Ditches(最大流入门) http://poj.org/problem?id=1273 题意:        现在有m个池塘(从1到m开始编号,1为源点,...

POJ 1273 Drainage Ditches (最大流入门~)

昨天一直没看懂EK算法,今天早上用gdb调试了很久终于知道咋回事啦~~给个链接先,我就是在这里看到的: http://www.wutianqi.com/?p=3107 #include #i...

最大流入门 之 poj 1273

//  [5/7/2014 Sjm] /* 图论之最大流: Ford-Fulkerson方法 dfs 实现 第一次接触网络流的题目,卡了好久。。。最后终于理解了代码,自己能敲出来了。。。 教训: (体...

[网络流入门,简单题]poj1273Drainage Ditches最大流

最大流第一题.哦也~~~~~~~~~凭自己的理解写的代码,多做点题,ying

HDU1532/POJ1273 Drainage Ditches 最大排水量 网络最大流 EK、Dinic、ISAP算法

题意:为了不让水淹三叶草,现在修了很多排水管,现在问从源点到汇点的最大排水量。

POJ - 1273 Drainage Ditches (网络流入门题)

题目大意: 每当下雨,农夫最喜爱的养尊处优的地方周围就变成了一个池塘,这让他很不爽,所以决心要把这个问题解决掉,所以他就在四周建造了一些渠沟以便排水,更为巧妙地是可以把这水排到一个小溪处。 编号为...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)