题目描述

(传送门:http://poj.org/problem?id=1273翻译 by sxy(AFO的蒟蒻))

每次约翰的农场下雨,Bessie的水池里的四叶草就会被弄破。这就意味着,这些四叶草又会被水淹没,并且会花费很长一段时间才能重新生长好。因此,约翰后来就架设了一套排水系统,这样一来Bessie的四叶草就不会因为下雨而被水淹没破坏了,雨水会通过排水渠流向附近的小溪。作为一个专业的工程师,约翰也在每一条排水渠的开头,安装了一个流量控制器,这样一来他就能控制让多少水流通过这条水渠。

约翰不仅仅知道每分钟每条排水渠能运输多少加仑的水,而且约翰还精心布置了这些排水渠,使得这些水渠之间可以联通,并且构成了一个复杂的网络

现在给你所有的信息,考虑每分钟最多有多少水能够从水池里面被排到小溪里面。对于任何一条排水渠,里面的水流只能是单向的。但是可能会有些排水渠的构造,可以使得水流在一个环内。

输入格式

输入第一行包含两个整数N,M。N表示约翰的农场里的排水渠的数量。M表示这些排水渠之间的交点的个数。特别的,交点1是Bessie的水池,交点M是小溪。接下来的输入有N行,每行有3个整数Si,Ci,Ei (1 <= Si,Ei <= M)描述了Si号交点和Ci号交点之间的排水渠最多够流过Ci的水量

输出格式

输出只有1行一个整数,表示每分钟能从水池中流走的最大水流量

样例

样例输入

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

样例输出

50

数据范围与提示

样例解释

按照如图所示的方式排水,每分钟最大排水量为 50

数据范围

1<=N,M<=2001 <= N,M <= 2001<=N,M<=200

Ci∈(0,106]

网络流模板

//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=1000+10,maxm=5000+10;
int n,m; int aa;char cc;
int read() {
aa=0;cc=getchar();
while(cc<'0'||cc>'9') cc=getchar();
while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
return aa;
} struct Node{
int x,y,cap,flow;
}node[2*maxm]; int cur[maxn];
int fir[maxn],nxt[2*maxm],e=1;
void add(int x,int y,int z) {
node[++e].x=x;node[e].y=y;node[e].cap=z; nxt[e]=fir[x];fir[x]=e;
node[++e].x=y;node[e].y=x;node[e].cap=0; nxt[e]=fir[y];fir[y]=e;
} int zz[maxn],dis[maxn],s=1,t=0;
bool BFS() {
memset(dis,-1,sizeof(dis));
dis[1]=0; s=1,t=0;zz[++t]=1;
int x,y;
while(s<=t) {
x=zz[s];s++;
for(y=fir[x];y;y=nxt[y]) {
if(node[y].flow>=node[y].cap||dis[node[y].y]!=-1) continue;
dis[node[y].y]=dis[x]+1;
zz[++t]=node[y].y;
}
}
return dis[n]!=-1;
} int DFS(int pos,int maxf) {
if(pos==n||!maxf) return maxf;
int rs=0,now;
for(int &y=cur[pos];y;y=nxt[y]) {
if(node[y].flow>=node[y].cap||dis[node[y].y]!=dis[node[y].x]+1) continue;
now=DFS(node[y].y,min(maxf,node[y].cap-node[y].flow));
node[y].flow+=now;
node[y^1].flow-=now;
rs+=now;
maxf-=now;
}
if(!rs) dis[pos]=-1;
return rs;
} int Dinic() {
int rs=0;
while(BFS()) {
memcpy(cur,fir,sizeof(fir));
rs+=DFS(1,0x3f3f3f3f);
}
return rs;
} int main() {
int x,y,z;
m=read();n=read();
for(int i=1;i<=m;++i) {
x=read();y=read();z=read();
add(x,y,z);
}
printf("%d",Dinic());
return 0;
}

  

USACO93网络流入门Drainage Ditches 排水渠(DCOJ 5130)的更多相关文章

  1. 网络流入门 Drainage Ditches

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) ...

  2. HDU 1532 Drainage Ditches 排水渠(最大流,入门)

    题意: 给出一个有向图,以及边上的容量上限,求最大流.(有重边,要将容量上限叠加) 思路: 用最简单的EK+BFS解决.每次搜到一条到达终点的路径,就立刻退出,更新ans,然后再回头修改图中的当前fl ...

  3. 网络流最经典的入门题 各种网络流算法都能AC。 poj 1273 Drainage Ditches

    Drainage Ditches 题目抽象:给你m条边u,v,c.   n个定点,源点1,汇点n.求最大流.  最好的入门题,各种算法都可以拿来练习 (1):  一般增广路算法  ford() #in ...

  4. nyoj_323:Drainage Ditches(网络流入门)

    题目链接 网络流入门@_@,此处本人用的刘汝佳的Dinic模板 #include<bits/stdc++.h> using namespace std; const int INF = 0 ...

  5. HDU-1532 Drainage Ditches,人生第一道网络流!

    Drainage Ditches 自己拉的专题里面没有这题,网上找博客学习网络流的时候看到闯亮学长的博客然后看到这个网络流入门题!随手一敲WA了几发看讨论区才发现坑点! 本题采用的是Edmonds-K ...

  6. POJ 1273:Drainage Ditches 网络流模板题

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 63339   Accepted: 2443 ...

  7. poj 1273 Drainage Ditches【最大流入门】

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 63924   Accepted: 2467 ...

  8. POJ 1273 Drainage Ditches(网络流,最大流)

    Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...

  9. 【网络流】POJ1273 Drainage Ditches

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 78671   Accepted: 3068 ...

随机推荐

  1. python—时间与时间戳之间的转换

    python-时间与时间戳之间的转换 对于时间数据,如2016-05-05 20:28:54,有时需要与时间戳进行相互的运算,此时就需要对两种形式进行转换,在Python中,转换时需要用到time模块 ...

  2. 深喉起底APP线下预装市场,如何一夜间拥有千万用户

    注:预装对于中国的移动互联网创业者有多重要?i黑马知道这样一个内幕,某商务告诉我他们公司的前2000万用户就是靠预装打下来的,总部在北京,直接派驻商务长期扎根在深圳搞定手机厂商.而这家公司初期发展得益 ...

  3. 高斯消元和高斯约旦消元 Gauss(-Jordan) Elimination

    高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵. 在讲算法前先介绍些概念 矩阵的初等变换 矩阵的初等变换又分为矩阵的初等行变换和矩阵的初等列变换 ...

  4. Luogu P2679 子串(字符串+dp)

    P2679 子串 题意 题目描述 有两个仅包含小写英文字母的字符串\(A\)和\(B\). 现在要从字符串\(A\)中取出\(k\)个互不重叠的非空子串,然后把这\(k\)个子串按照其在字符串\(A\ ...

  5. Data Lake Analytics,大数据的ETL神器!

    0. Data Lake Analytics(简称DLA)介绍 数据湖(Data Lake)是时下大数据行业热门的概念:https://en.wikipedia.org/wiki/Data_lake. ...

  6. PhpExcel参考网址

    参考网址: http://www.cnblogs.com/yuwensong/p/3771787.html

  7. DTD约束与schema约束的不同

    本篇笔记了解------Schema约束的语法 ------可以参考W3school之Schema教程. Schema:是基于 XML 的 DTD 替代者,用于描述XML文档结构.支持XML 命名空间 ...

  8. linux基础指令参数

    eth0,eth1,eth2--代表网卡一,网卡二,网卡三-- lo代表127.0.0.1,即localhost 参考: Linux命令:ifconfig 功能说明:显示或设置网络设备 语 法:ifc ...

  9. codevs1214 线段覆盖

    1214 线段覆盖 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold       题目描述 Description 给定x轴上的N(0<N<100)条线段, ...

  10. R语言可视化--颜色

    RColorBrewer包 三类调色板:sequential / diverging / qualitative 调色板的信息可以与colorRamp / colorRampPalette结合使用 从 ...