poj1273 Drainage Ditches
Posted 天道酬勤007
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj1273 Drainage Ditches相关的知识,希望对你有一定的参考价值。
/** 题目:poj1273 Drainage Ditches 链接:http://poj.org/problem?id=1273 题意:裸的最大流 思路:裸的最大流 */ #include<iostream> #include<cstring> #include<vector> #include<cstdio> #include<algorithm> using namespace std; const int INF = 0x3f3f3f3f; typedef long long LL; const int N = 250; struct edge{ int to, cap, rev; }; vector<edge> G[N]; bool used[N]; 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(f,e.cap)); if(d>0){ e.cap -= d; G[e.to][e.rev].cap += d; return d; } } } return 0; } LL max_flow(int s,int t) { LL flow = 0; for(;;){ memset(used, 0, sizeof used); int f = dfs(s,t,INF); if(f==0) return flow; flow+=f; } } int main() { int n , m; while(scanf("%d%d",&m,&n)==2) { int u, v, cap; for(int i = 0; i <= n; i++) G[i].clear(); for(int i = 0; i < m; i++){ scanf("%d%d%d",&u,&v,&cap); add_edge(u,v,cap); } printf("%lld\n",max_flow(1,n)); } return 0; }
以上是关于poj1273 Drainage Ditches的主要内容,如果未能解决你的问题,请参考以下文章