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创建表,一直卡住不动了.创建语句如下 ...
- 在程序中使用命令行的方式来调用py文件
做这个主要是程序可以做到直接调用一个脚本,而不是从脚本中把类或者函数import出来这样调用,比如我们写的python命令行文件,让java来调用,让c++来调用,都是可以的.这样不需要整个语言都用p ...
- codeforces 547A Mike and Frog
近期都是这样的题呢. . .... 哎 開始想纯暴力(体如今跳出循环t>=那里.,,,)..,.随着数据变大.. ...(t=499981500166是能够的),,,..,,23333333 超 ...
- leetCode 33.Search in Rotated Sorted Array(排序旋转数组的查找) 解题思路和方法
Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...
- Hbase的基本认识
1.使用场景:实时查询交互 说说概念性的东西,方便今后更加深入的理解. HBase是Apache Hadoop中的一个子项目,Hbase依托于Hadoop的HDFS作为最基本存储基础单元,通过使用ha ...
- iOS - UITableView判断reloadData加载数据已经结束
问题: stackoverflow上有人提问这样的问题 http://stackoverflow.com/questions/16071503/how-to-tell-when-uitableview ...
- poj_2195 最小费用最大流
题目大意 一个nxm的地图,地图上的横纵交错成nxm个交叉点,其中有k个交叉点为房间,k个交叉点为k个小人的初始位置.小人可以在地图上沿着水平或垂直方向行走,每走一步的代价为1.求这k个小人分别到达k ...
- Android Log.isLoggable方法异常:exceeds limit of 23 characters
AndroidRuntime: java.lang.IllegalArgumentException: Log tag "AccountSetupIncomingFragment" ...
- 170505、MySQL的or/in/union与索引优化
假设订单业务表结构为: order(oid, date, uid, status, money, time, …) 其中: oid,订单ID,主键 date,下单日期,有普通索引,管理后台经常按照da ...
- Golang学习 - builtin 包
Go builtin包提供了go预先声明的函数.变量等的文档.这些函数变量等的实现其实并不是在builtin包里,只是为了方便文档组织. 这些内置的变量.函数.类型无需引入包即可使用. 默认提供的有: ...