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 ...
随机推荐
- 查看死锁原因 /data/anr/traces.txt
Android ANR这个错误大家并不陌生,但是从Android 2.2开始出错的ANR信息会自动上传给Google进行系统分析改进,当然了你的应用ANR错误其实保存在一个文件中,在/data/anr ...
- easyui只选择年份月份的插件---SimpleCanleder
<td>日期</td> <td> <input type="text" id="search_begindate" s ...
- 转:携程App的网络性能优化实践
http://kb.cnblogs.com/page/519824/ 携程App的网络性能优化实践 受益匪浅的一篇文章,让我知道网络交互并不是简单的传输和接受数据.真正的难点在于后面的性能优化 下面对 ...
- C语言数据结构----栈的定义及实现
本节主要说的是数据结构中的栈的基本定义和实现的方式,其中实现的方式采用的是复用顺序表和单向链表的方式. 一.栈的基本定义 1.栈是一种特殊的线性表,只能从固定的方向进出,而且栈进出的基本原则是:先进栈 ...
- BZOJ 2693: jzptab( 莫比乌斯反演 )
速度居然#2...目测是因为我没用long long.. 求∑ lcm(i, j) (1 <= i <= n, 1 <= j <= m) 化简之后就只须求f(x) = x∑u( ...
- Vistual Studio 2012更换皮肤
早就装上VS2012了,可是除了在家里练习玩玩的时候使用外,在公司都还在用2010,也没好好研究过2012.这两天把公司的电脑换了系统,也就把vs换成了2012.可是看着不是白白的皮肤就是深色的皮肤, ...
- ASP漏洞+SQL注入的入侵方法
本文就是想对装上了防火墙的主机,进行入侵攻击的大概思路小结一下. 首先当然是用扫描器对这台服务器(以下简称主机A)进行常规的扫描,得到初步的信息.再用nmap -sS IP -P0 -p 139 ,透 ...
- Swift - 实现拨打电话
要实现打电话功能,最简单最直接的方式便是:直接跳到拨号界面 (注意:这个需要真机调试,模拟器无效果) 1 2 //自动打开拨号页面并自动拨打电话 UIApplication.sharedApplica ...
- 微软vs2015先行,Visual Studio 2015正式版离线iso及在线下载(附key)附带百度云盘地址
win10正式版发布之前我们迎来了vs2015正式版,迫不及待要下载朋友可以看看 Visual Studio Community 2015简体中文版(社区版,针对个人免费): 在线安装exe:http ...
- 开源数据库连接池之Tomcat内置连接池
本篇介绍几种开源数据库连接池,同时重点讲述如何使用Tomcat服务器内置的数据库连接池. 之前的博客已经重点讲述了使用数据库连接池的好处,即是将多次创建连接转变为一次创建而使用长连接模式.这样能减少数 ...