zoukankan      html  css  js  c++  java
  • POJ 1273 Drainage Ditches

    链接: http://poj.org/problem?id=1273

    最大流问题.


    #include <iostream>
    #include <vector>
    #include <cstring>
    #define MAX_M 200
    #define INF 100000000
    using namespace std;
    typedef struct
    {
    	int to;
    	int cap;			//容量
    	int rev;			//反向边
    }edge;
    vector<edge> G[MAX_M+5];
    bool used[MAX_M+5];
    
    void add_edge(int from,int to,int cap)
    {
    	G[from].push_back( (edge){to,cap,G[to].size()} );
    	G[to].push_back( (edge) {from,0,G[from].size()-1} );
    }
    int dfs(int v,int t,int f)
    {
    	if(v==t)
    		return f;
    	used[v]=true;
    	for(int i=0;i<G[v].size();i++)
    	{
    		edge &e=G[v][i];
    		if(!used[e.to]&&e.cap>0)
    		{
    			 int d=dfs(e.to,t,min(e.cap,f));
    			 if(d>0)
    			 {
    				 e.cap-=d;
    				 G[e.to][e.rev].cap+=d;
    				 return d;
    			 }
    
    		}
    	}
    	return 0;
    
    }
    long long  max_flow(int s,int t)
    {
    	long long flow =0;
    	while(true)
    	{
    		memset(used,0,sizeof(used));
    		int f=dfs(s,t,INF);
    		if(f==0)
    			return flow;
    		flow+=f;
    	}
    }
    void init(void)
    {
    	memset(used,0,sizeof(used));
    	for(int i=0;i<MAX_M+5;i++)
    		G[i].clear();
    
    }
    int main()
    {
    	int N,M;
    	int s,e,c;
    	while(cin>>N>>M)
    	{
    		init();
    		for(int i=0;i<N;i++)
    		{
    			cin>>s>>e>>c;
    			add_edge(s,e,c);
    		}
    
    		cout<<max_flow(1,M)<<endl;
    
    	}
    	return 0;
    }
    


  • 相关阅读:
    资料网站
    HTML、CSS部分
    面试题三
    面试题二
    面试题一
    上学时的HTML+JS+CSS(小总结)
    01.策略模式-上篇
    【解决方案】HTTP could not register URL http://+:6001/
    【问题与思考】1+"1"=?
    WCF安全3-Transport与Message安全模式
  • 原文地址:https://www.cnblogs.com/frankM/p/4399464.html
Copyright © 2011-2022 走看看