(网络流 模板 Dinic) Drainage Ditches --POJ --1273
链接:
http://poj.org/problem?id=1273
代码:
//Dinic #include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std; const int MAXN = ;
const int oo = 1e9+; struct Edge
{
int v, flow, next;
}edge[MAXN];
int Head[MAXN], cnt;
int Layer[MAXN]; void InIt()
{
cnt = ;
memset(Head, -, sizeof(Head));
} void AddEdge(int u, int v, int flow)
{
edge[cnt].v = v;
edge[cnt].flow = flow;
edge[cnt].next = Head[u];
Head[u] = cnt++; swap(u, v); edge[cnt].v = v;
edge[cnt].flow = ;
edge[cnt].next = Head[u];
Head[u] = cnt++; } bool BFS(int start, int End) /// 分层
{
memset(Layer, , sizeof(Layer));
queue<int> Q;
Q.push(start);
Layer[start] = ; while(Q.size())
{
int u = Q.front();Q.pop(); if(u == End)return true; for(int j=Head[u]; j!=-; j=edge[j].next)
{
int v = edge[j].v; if(Layer[v] == && edge[j].flow) /// 判断Layer[v]==0,可以减少循环
{
Layer[v] = Layer[u] + ;
Q.push(v);
}
}
} return false;
} int DFS(int u, int MaxFlow, int End) /// DFS返回的是这条路上的最大流(最小值)
{ ///MaxFlow代表从源点起的最大流量
if(u == End)return MaxFlow; int uflow = ; ///从u点到汇点的最大流量 for(int j=Head[u]; j!=-; j=edge[j].next)
{
int v = edge[j].v; if(Layer[v]==Layer[u]+ && edge[j].flow)
{
int flow = min(edge[j].flow, MaxFlow-uflow);
flow = DFS(v, flow, End); edge[j].flow -= flow;
edge[j^].flow += flow;
uflow += flow; if(uflow == MaxFlow)
break;
}
} if(uflow == )
Layer[u] = ; return uflow;
} int Dinic(int start, int End)
{
int MaxFlow = ; while(BFS(start, End) == true) /// 先找出一条从Start到End的路
MaxFlow += DFS(start, oo, End); return MaxFlow;
} int main()
{
int N, M; while(scanf("%d%d", &M, &N) != EOF)
{
int u, v, flow; InIt(); while(M--)
{
scanf("%d%d%d", &u, &v, &flow);
AddEdge(u, v, flow);
} printf("%d\n", Dinic(, N));
} return ;
}
(网络流 模板 Dinic) Drainage Ditches --POJ --1273的更多相关文章
- (网络流 模板 Edmonds-Karp)Drainage Ditches --POJ --1273
链接: http://poj.org/problem?id=1273 Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total ...
- Drainage Ditches - poj 1273(网络流模板)
题意:1是源点,m是汇点,求出来最大流量,没什么好说的就是练习最大流的模板题 ************************************************************* ...
- 【网络流】POJ1273 Drainage Ditches
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 78671 Accepted: 3068 ...
- XTU 二分图和网络流 练习题 J. Drainage Ditches
J. Drainage Ditches Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d Ja ...
- 网络流 最大流 Drainage Ditches Dinic
hdu 1532 题目大意: 就是由于下大雨的时候约翰的农场就会被雨水给淹没,无奈下约翰不得不修建水沟,而且是网络水沟,并且聪明的约翰还控制了水的流速,本题就是让你求出最大流速,无疑要运用到求最大流了 ...
- UVA 820 --- POJ 1273 最大流
找了好久这两个的区别...UVA820 WA了 好多次.不过以后就做模板了,可以求任意两点之间的最大流. UVA 是无向图,因此可能有重边,POJ 1273是有向图,而且是单源点求最大流,因此改模板的 ...
- 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(网络流dinic算法模板)
POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...
- POJ 1273 - Drainage Ditches - [最大流模板题] - [EK算法模板][Dinic算法模板 - 邻接表型]
题目链接:http://poj.org/problem?id=1273 Time Limit: 1000MS Memory Limit: 10000K Description Every time i ...
随机推荐
- sqlserver字符串拆分函数
CREATE FUNCTION f_splitSTR(@s varchar(8000), --待分拆的字符串@split varchar(10) --数据分隔符)RETURNS @re TABLE(c ...
- EL表达式获取请求
1EL 表达式语法: ${ EL 表达式} 它的特点: 1自动转换类型, 2使用简单. 2 EL表达式具有类型无关性,可以使用“.”或者“[]”操作符在相应的作用域(page , requ ...
- scala private 和 private[this] 的区别
class PackageStudy { private var a = 0 private[this] var b = 1 // 只能在类内部使用,对象都不能直接使用 def getb(): Int ...
- 向数据库添加学生信息。存放在REQUEST对象里
代码前几天已经发过了,但是程序一直还没运行出来,今天重新建立了一个数据库,才可以,下面补充上数据截图
- Java可重入锁与不可重入锁
可重入锁,指的是以线程为单位,当一个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,而其他的线程是不可以的. synchronized 和 ReentrantLock 都是可重入锁. 可重入 ...
- nginx的Mainline version、Stable version、Legacy version
Nginx官网提供了三个类型的版本Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版Stable version:最新稳定版,生产环境上建议使用的版 ...
- Interface, 接口的实现初解
百度是这么说的: Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 两种含 ...
- Unity 5.1+ Assertion Library (断言库)
Unity 5.1+ ,加入了“断言库”,在 Asset 类中可以方便的找到需要使用断言的函数. UnityEngine.Assertions.Assert.IsNotNull( ) 为何使用断言 使 ...
- 121. Best Time to Buy and Sell Stock买卖股票12
一 [抄题]: If you were only permitted to complete at most one transaction (ie, buy one and sell one sha ...
- fragment Activity之间传值的方法 之------------接口回调
首先 定义一个 回调接口 public interface FragmentCallBack { public void callbackFun1(Bundle arg); public void ...