POJ1273_Drainage Ditches(网络流)
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 54887 | Accepted: 20919 |
Description
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
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
Sample Input
5 4
1 2 40
1 4 20
2 4 20
2 3 30
3 4 10
Sample Output
50
Source
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define inf 99999999
#define M 200+10
using namespace std;
struct edge
{
int c,f;
}edge[M][M];
int n,m,vis[M],a[M],pre[M],f;
queue<int>Q;
void ford()
{
while(1)
{
memset(pre,-1,sizeof(pre));
memset(a,-1,sizeof(a));
memset(vis,-1,sizeof(vis));
while(!Q.empty())
Q.pop();
Q.push(1);
pre[1]=1;
vis[1]=0;
a[1]=inf;
while(!Q.empty()&&vis[m]==-1)
{
int u=Q.front();
Q.pop();
for(int v=1;v<=m;v++)
{
if(vis[v]==-1)
{
if(edge[u][v].f<edge[u][v].c)
{
a[v]=min(a[u],edge[u][v].c-edge[u][v].f);
vis[v]=0;
pre[v]=u;
Q.push(v);
}
else if(edge[v][u].f>0)
{
a[v]=min(a[u],edge[v][u].f);
vis[v]=0;
pre[v]=-u;
Q.push(v);
}
}
}
vis[u]=1;
}
if(vis[m]==-1||a[m]==0)
break;
int k1=m,k2=abs(pre[k1]);
int aaa=a[m];
while(1)
{
edge[k2][k1].f+=aaa;
edge[k1][k2].f-=aaa;
if(k2==1)break;
k1=k2;k2=abs(pre[k2]);
}
f+=a[m];
}
}
int main()
{
int i,j,u,v,w;
while(~scanf("%d%d",&n,&m))
{
f=0;
memset(edge,0,sizeof(edge));
for(i=0;i<n;i++)
{
scanf("%d%d%d",&u,&v,&w);
edge[u][v].c+=w;
}
ford();
printf("%d\n",f);
}
return 0;
}
POJ1273_Drainage Ditches(网络流)的更多相关文章
- POJ 1273 Drainage Ditches (网络流Dinic模板)
Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...
- POJ 1273:Drainage Ditches 网络流模板题
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 63339 Accepted: 2443 ...
- HDU1532 Drainage Ditches 网络流EK算法
Drainage Ditches Problem Description Every time it rains on Farmer John's fields, a pond forms over ...
- poj 1273 Drainage Ditches (网络流 最大流)
网络流模板题. ============================================================================================ ...
- USACO 4.2 Drainage Ditches(网络流模板题)
Drainage DitchesHal Burch Every time it rains on Farmer John's fields, a pond forms over Bessie's fa ...
- NYOJ 323 Drainage Ditches 网络流 FF 练手
Drainage Ditches 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Every time it rains on Farmer John's fields, ...
- POJ 1273 Drainage Ditches 网络流 FF
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 74480 Accepted: 2895 ...
- Drainage Ditches~网络流模板
Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...
- [POJ1273][USACO4.2]Drainage Ditches (网络流最大流)
题意 网络流最大流模板 思路 EK也不会超时 所以说是一个数据比较水的模板题 但是POJ有点坑,多组数据,而且题目没给 哭得我AC率直掉 代码 用的朴素Dinic #include<cstdio ...
随机推荐
- cocos2dx进阶学习之CCEGLView
继承关系 CCEGLView-> CCEGLViewProtocol CCEGLView是窗口,在不同平台上有不同的实现,而CCEGLViewProtocol是CCEGLView定义的接口,所以 ...
- C Primer Plus 读书笔记之C基础回顾
目标代码文件.可执行文件和库 C编程的基本策略是使用程序将源代码文件转换为可执行文件,此文件包含可以运行的机器语言代码.C分两步完成这一工作:编译和链接.编译器将源代码转换为中间代码,链接器将此中间代 ...
- 【C++】第二章:Hello World!
1.开发工具:Microsoft Visual C++ v6.0 2.通过IDE建立Hello World程序: 我们可以看到三个文件夹结构,分别是: Source Files(源文件). Heade ...
- Add custom and listview web part to a page in wiki page using powershell
As we know, Adding list view web part is different from custom web part using powershell, what's mor ...
- Linux内核-系统调用
Linux内核-系统调用 1.与内核通信 #系统调用在用户空间进程和硬件设备之间添加了一个中间层 作用:1.为用户空间提供了一种硬件的抽象接口 2.系统调用保证了系统的稳定和安全 3.出于每一个进程都 ...
- vi命令提示:Terminal too wide
putty: 在我的电脑上,缺省的设置是这样的: localhost:~ eygle$ stty -aspeed 9600 baud; 51 rows; 171 columns; 在远程编辑文件时,减 ...
- Ubuntu 安装Matlab2010a
1.挂载ISO 2.到/media/iso内,在终端执行./install 3.可视化安装 4.问题 1)/usr/local/MATLAB/R2010a/bin/util/oscheck.sh:/l ...
- windows/Linux下安装maven
Linux下安装maven 1.首先到Maven官网下载安装文件,目前最新版本为3.0.3,下载文件为apache-maven-3.3.9-bin.tar.gz,下载可以使用wget命令: 2.进入下 ...
- 基于visual Studio2013解决C语言竞赛题之1032平方和
题目 解决代码及点评 /* 编程序将一个正整数写成其它两个正整数的平方和,若不能成立时输出"NO".例如 5 = 1^2 + 2^2 , 25 ...
- Sting和StringBuffer的区别
java.lang.String代表不可变序列: s1 = "hello"; s2 = "world"; s1 = s1 + s2; 内存分配情况是s1有块内存 ...