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 ...
随机推荐
- linux中的目录和文件的统计
ls 目录 | wc -l find ./ -type d | wc -l //查找目录个数 find ./ -type f | wc -l ...
- 【RF库Collections测试】combine lists
Arguments: [ *lists ]Combines the given `lists` together and returns the result. The given lists are ...
- xmapp上搭建dvwa
1. XMapp下载好,安装于C:盘下 2. 根据readme中的揭开,首先执行setup_xmapp. 3. 单击xampp_start, 不报错则继续 4. 在browser中访问localhos ...
- 如何设置SOLR的高亮 (highlight)?
打开SOLR的核心配置文件: solrconfig.xml 找到 standard request handler 写入以下XML配置代码: <requestHandler name=" ...
- c/c++设置图片为透明图
在绘制图片的时候先把源位图填充背景设置为白色 例如:m_bufferpicture.FillSolidRect(0,0,m_nWidth,m_nHeight,RGB(255,255,255));//这 ...
- 进程保护--CrossThreadFlags标志位
原理: 1. 将进程的所有线程的线程CrossThreadFlags标志位设置成Terminated或者System. 效果:任务管理器,WSYSCheck,ICESWORD无法结束进程.. 但PCH ...
- WPS之替换样式
以前写文档需要颜色设置什么的时候,都是遇到的时候,就进行设置,挺烦的,要一直切换. 今天突然想到,既然有替换应该可能也有样式替换,就查了一下,试了试果然可以,以后就这么干了
- 网络子系统45_ip协议tos处理
//ip报头tos字段,一个字节 // 二进制位:[0 1 2] [3] [4] [5] [6] [7] // 1.[0 1 2] 表示优先级: // 000 路由 // 001 优先级 // 010 ...
- JS-比较函数中嵌套函数,可以排序【对象数组】
function createCompareFun(propertyName){ return function(object1,object2){ var value1 = object1[prop ...
- LeetCode——Power of Two
Description: Given an integer, write a function to determine if it is a power of two. public class S ...