poj1273-----最大流基础(最简单的最大流!--模板题)
2012-10-15 20:43
766 查看
题意:下雨的时候约翰的田里总是积水,积水把他种的三叶草给淹了,他于是做了若干排水沟,每条沟在起始处安置一个阀门来控制这条沟的最大排水量,现在给出沟的条数以及阀门的个数。并给出每条沟的最大排水量。约翰的田里的积水处是阀门1,排出水的位置是最后一个阀门。求约翰在处理积水时的最大排出量。
#include<cstdlib> #include<iostream> #include<sstream> #include<cstdio> #include<cmath> #include<cstring> #include <algorithm> #include<vector> #include<set> #include<queue> #define LL long long #define inf 0x7f7f7f7f #define E 1e-9 #define N 205 #define M 2000000 using namespace std; int flow ,cap ; int d ,fa ; int n,m; void dfs(int s,int t) { memset(d,0,sizeof(d)); queue<int> q; q.push(s); d[s]=inf; while(!q.empty()) { int u=q.front(); q.pop(); for(int i=1; i<=m; i++) //m是结点个数! if(!d[i]&&cap[u][i]>flow[u][i]) { d[i]=min(d[u],cap[u][i]-flow[u][i]); q.push(i); fa[i]=u; if(i==t) { while(!q.empty())q.pop(); return ; } } } } int getflow(int s,int t) { memset(flow,0,sizeof(flow)); int f=0; while(1) { dfs(s,t); if(!d[t]) break; f+=d[t]; for(int p=t; p!=s; p=fa[p])//更新流量 { flow[fa[p]][p]+=d[t]; flow[p][fa[p]]-=d[t]; } } return f; } int main() { #ifndef ONLINE_JUDGE freopen("ex.in","r",stdin); #endif while(scanf("%d%d",&n,&m)!=EOF) { memset(cap,0,sizeof(cap));//初始化很重要 int a,b,c; for (int i=0; i<n; i++) { scanf("%d%d%d",&a,&b,&c); cap[a][b]+=c; } printf("%d\n",getflow(1,m)); } return 0; }
相关文章推荐
- (模板)最大公约数/最大公约数(数论基础)
- pku Drainage Ditches 简单最大流 直接套模板 注意可能有重边
- poj1273及最大流Edmond karp算法模板
- 图像处理基础知识系列之四:最大似然和EM(期望最大化)算法简单梳理
- HDU 1856 More is better(简单并查集) 【最大并查集人数模板】
- HDU 1530 Maximum Clique 简单的最大团模板题
- hdu 1532&&poj1273 基础最大流
- [模板]最大流(Edmonds_Karp/Dinic算法(以poj1273为例
- hdu 1532&&poj1273 基础最大流
- 最大流的理解以及dinic模板 poj1273
- POJ 2485 Highways【最小生成树最大权——简单模板】
- POJ 2485 Highways【最小生成树最大权——简单模板】
- (POJ1273)Drainage Ditches(裸最大流,EK模板)
- InfoPath基础应用教程-1 设计一个简单的表单模板
- 线段树基础与模板与简单应用
- JavaSE8基础 构造代码块 简单示例
- 简单的编程0基础下Python入门指引
- Canvas基础学习(一)——实现简单时钟显示
- fancybox 基础 简单demo
- 一、基础篇:unity简单集成百度地图(基础地图),做记录,抗遗忘。(利用Android studio为unity编写百度地图插件)