POJ1273:Drainage Ditches(最大流入门 EK,dinic算法)
http://poj.org/problem?id=1273
Description
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
Output
Sample Input
5 4
1 2 40
1 4 20
2 4 20
2 3 30
3 4 10
Sample Output
50 EK算法:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <queue>
#define inf 0x3f3f3f3f
using namespace std;
int map[][],n,m,v[],pre[];
int bfs(int s,int t)
{
queue<int>q;
q.push(s);
memset(pre,-,sizeof(pre));
memset(v,,sizeof(v));
pre[s]=s;
v[s]=;
while(!q.empty())
{
int w=q.front();
q.pop();
for(int i=; i<=n; i++)
{
if(map[w][i]&&!v[i])
{
pre[i]=w;
v[i]=;
if(i==t)
{
return ;
}
q.push(i);
}
}
}
return ;
}
void EK(int s,int t)
{
int ans=,minx;
while(bfs(s,t)==)
{
minx=inf;
for(int i=t; i!=s; i=pre[i])
{
minx=min(minx,map[pre[i]][i]);
}
for(int i=t; i!=s; i=pre[i])
{
map[pre[i]][i]-=minx;
map[i][pre[i]]+=minx;
}
ans+=minx;
}
printf("%d\n",ans);
return ;
}
int main()
{
int xx,yy,zz;
while(scanf("%d%d",&m,&n)!=EOF)
{
memset(map,,sizeof(map));
while(m--)
{
scanf("%d%d%d",&xx,&yy,&zz);
map[xx][yy]+=zz;
}
EK(,n);
}
return ;
}
dinic算法:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <queue>
#define inf 0x3f3f3f3f
using namespace std;
int map[][],dis[];
int m,n;
int bfs(int s,int t)
{
memset(dis,-,sizeof(dis));
dis[s]=;
queue<int>q;
q.push(s);
while(!q.empty())
{
int y=q.front();
q.pop();
for(int i=; i<=n; i++)
{
if(dis[i]==-&&map[y][i])
{
dis[i]=dis[y]+;
q.push(i);
}
}
}
if(dis[t]>) return ;
return ;
}
int dinic(int s,int maxt)
{
if(s==n) return maxt;
int a,sum=maxt;
for(int i=; i<=n&∑ i++)
{
if(dis[i]==dis[s]+&&map[s][i]>)
{
a=dinic(i,min(sum,map[s][i]));
map[s][i]-=a;
map[i][s]+=a;
sum-=a;
}
}
return maxt-sum;
}
int main()
{
int x,y,z,ans;
while(scanf("%d%d",&m,&n)!=EOF)
{
ans=;
memset(map,,sizeof(map));
while(m--)
{
scanf("%d%d%d",&x,&y,&z);
map[x][y]+=z;
}
while(bfs(,n)==)
{
ans+=dinic(,inf);
}
printf("%d\n",ans);
}
return ;
}
POJ1273:Drainage Ditches(最大流入门 EK,dinic算法)的更多相关文章
- POJ-1273 Drainage Ditches 最大流Dinic
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65146 Accepted: 25112 De ...
- poj 1273 Drainage Ditches 最大流入门题
题目链接:http://poj.org/problem?id=1273 Every time it rains on Farmer John's fields, a pond forms over B ...
- poj-1273 Drainage Ditches(最大流基础题)
题目链接: Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 67475 Accepted ...
- poj1273 Drainage Ditches (最大流板子
网络流一直没学,来学一波网络流. https://vjudge.net/problem/POJ-1273 题意:给定点数,边数,源点,汇点,每条边容量,求最大流. 解法:EK或dinic. EK:每次 ...
- [poj1273]Drainage Ditches(最大流)
解题关键:最大流裸题 #include<cstdio> #include<cstring> #include<algorithm> #include<cstd ...
- poj1273 Drainage Ditches Dinic最大流
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 76000 Accepted: 2953 ...
- Poj 1273 Drainage Ditches(最大流 Edmonds-Karp )
题目链接:poj1273 Drainage Ditches 呜呜,今天自学网络流,看了EK算法,学的晕晕的,留个简单模板题来作纪念... #include<cstdio> #include ...
- POJ 1273 - Drainage Ditches - [最大流模板题] - [EK算法模板][Dinic算法模板 - 邻接表型]
题目链接:http://poj.org/problem?id=1273 Time Limit: 1000MS Memory Limit: 10000K Description Every time i ...
- 2018.07.06 POJ1273 Drainage Ditches(最大流)
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Description Every time it rains on Farmer J ...
随机推荐
- 通过phoenix创建hbase表失败,创建语句卡住,hbase-hmaster报错:exception=org.apache.hadoop.hbase.TableExistsException: SYNC_BUSINESS_INFO_BYDAY_EFFECT
问题描述: 前几天一个同事来说,通过phoenix创建表失败了,一直报表存在的错误,删除也报错,然后就针对这个问题找下解决方案. 问题分析: 1.通过phoenix创建表,一直卡住不动了.创建语句如下 ...
- [转]ASP.NET MVC 5 - 查询Details和Delete方法
在这部分教程中,接下来我们将讨论自动生成的Details和Delete方法. 查询Details和Delete方法 打开Movie控制器并查看Details方法. public ActionResul ...
- Spring------SpringBoot参考书籍
转载: http://download.csdn.net/download/plus_dy/8972653
- Swift学习笔记之--类和对象
通过在 class后接类名称来创建一个类.在类里边声明属性与声明常量或者变量的方法是相同的,唯一的区别的它们在类环境下.同样的,方法和函数的声明也是相同的写法 class Shape { func s ...
- centos 安装 phalcon
git clone --depth 1 --branch phalcon-v2.0.3 https://github.com/phalcon/cphalcon.git cd cphalcon/ext ...
- C语言各种存储模式的区别?最常用的存储模式有哪些?
DOS用一种段地址结构来编址计算机的内存,每一个物理内存位置都有一个可通过段地址一偏移量的方式来访问的相关地址.为了支持这种段地址结构,大多数C编译程序都允许你用以下6种存储模式来创建程序: ---- ...
- [译] 关于CSS中的float和position
原文 http://learn.shayhowe.com/advanced-html-css/detailed-css-positioning 当构建页面排版时,有不同的方法可以使用.使用哪一种方法取 ...
- Objective-c官方文档翻译 类的定义
类是对象的蓝图. 一个类是描述了对象的行为和属性.例如NSString的一个实例.他的类提供了各种的方法来转化和表示他的内部字符的表示. 每个类的实例都包含了这个类的属性和行为.例如每个NSSt ...
- Android英文文档翻译系列(2)——HandlerThread
public class HandlerThread extends Thread Class Overview Handy class for starting a new threa ...
- C/C++中的变量和静态变量
static有两种用法:一是面向过程程序设计语言中的static,用于普通变量和函数,不涉及类:二是面向对象程序设计中的static,主要涉及static在类中的作用. 面向过程设计中的static ...