HDU 1532 --&&-- POJ1273 dinic 算法
学长的代码
#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std; const int MAXN = 1005;
const int oo = 1e9+7; struct Edge
{
int v, flow, next;
}edge[MAXN];
int Head[MAXN], cnt;
int Layer[MAXN]; void InIt()
{
cnt = 0;
memset(Head, -1, 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 = 0;
edge[cnt].next = Head[u];
Head[u] = cnt++; }
bool BFS(int start, int End)
{
memset(Layer, 0, sizeof(Layer));
queue<int> Q;
Q.push(start);
Layer[start] = 1; while(Q.size())
{
int u = Q.front();Q.pop(); if(u == End)return true; for(int j=Head[u]; j!=-1; j=edge[j].next)
{
int v = edge[j].v; if(Layer[v] == 0 && edge[j].flow)
{
Layer[v] = Layer[u] + 1;
Q.push(v);
}
}
} return false;
}
int DFS(int u, int MaxFlow, int End)
{
if(u == End)return MaxFlow; int uflow = 0; for(int j=Head[u]; j!=-1; j=edge[j].next)
{
int v = edge[j].v; if(Layer[v]==Layer[u]+1 && edge[j].flow)
{
int flow = min(edge[j].flow, MaxFlow-uflow);
flow = DFS(v, flow, End); edge[j].flow -= flow;
edge[j^1].flow += flow;
uflow += flow; if(uflow == MaxFlow)
break;
}
} if(uflow == 0)
Layer[u] = 0; return uflow;
}
int Dinic(int start, int End)
{
int MaxFlow = 0; while(BFS(start, End) == true)
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(1, N));
} return 0;
}
HDU 1532 --&&-- POJ1273 dinic 算法的更多相关文章
- HDU 1532 (Dinic算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 题目大意: 就是由于下大雨的时候约翰的农场就会被雨水给淹没,无奈下约翰不得不修建水沟,而且是网络 ...
- HDU 1532||POJ1273:Drainage Ditches(最大流)
pid=1532">Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/327 ...
- hdu 1532&&poj1273 基础最大流
#include<stdio.h> #include<string.h> #include<queue> #include<iostream> usin ...
- 【最大流之Dinic算法】POJ1273 【 & 当前弧优化 & 】
总评一句:Dinic算法的基本思想比较好理解,就是它的当前弧优化的思想,网上的资料也不多,所以对于当前弧的优化,我还是费了很大的功夫的,现在也一知半解,索性就写一篇博客,来发现自己哪里的算法思想还没理 ...
- POJ1273:Drainage Ditches(最大流入门 EK,dinic算法)
http://poj.org/problem?id=1273 Description Every time it rains on Farmer John's fields, a pond forms ...
- hdu 2435 dinic算法模板+最小割性质
#include<stdio.h> #include<queue> #include<string.h> using namespace std; #define ...
- dinic算法学习(以poj1273为例)
Dinic 算法模板 Dinic算法是一种比較easy实现的.相对照较快的最大流算法. 求最大流的本质,就是不停的寻找增广路径.直到找不到增广路径为止. 对于这个一般性的过程,Dinic算法的优化例 ...
- 最大流EK算法/DINIC算法学习
之前一直觉得很难,没学过网络流,毕竟是基础知识现在重新来看. 定义一下网络流问题,就是在一幅有向图中,每条边有两个属性,一个是cap表示容量,一个是flow 表示流过的流量.我们要求解的问题就是从S点 ...
- hdu 1532 Drainage Ditches(网络流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 题目大意是:农夫约翰要把多个小池塘的水通过池塘间连接的水渠排出去,从池塘1到池塘M最多可以排多少 ...
随机推荐
- [.NET网格计算框架] Alchemi
Alchemi [.NET网格计算框架] 是 一个以使用简易为目的的Windows下的网格计算框架.它提供了:a)开发网格软件的编程环境 和 b)建造网格和运行网格软件的运行机制. A ...
- 面试10大算法汇总——Java篇
问题导读 1 字符串和数组 2 链表 3 树 4 图 5 排序 6 递归 vs 迭代 7 动态规划 8 位操作 9 概率问题 10 排列组合 11 其他 -- 寻找规律 英文版 以下从Java角度解释 ...
- Kotlin——初级篇(八):关于字符串(String)常用操作汇总
在前面讲解Kotlin数据类型的时候,提到了字符串类型,当然关于其定义在前面的章节中已经讲解过了.对Kotlin中的数据类型不清楚的同学.请参考Kotlin--初级篇(三):数据类型详解这篇文章. 在 ...
- Eclipse项目推送至github
0. 安装好git,配置正确 网上教程很多,略 1. 将eclipse中的项目放入git本地库 1.右键项目-->Team-->Share Project 2.勾选 Use or crea ...
- HDU 3367 Pseudoforest(Kruskal)
Pseudoforest Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- Spoken English Practice(I'm gonna do something I never thought I'd be able to)
绿色:连读: 红色:略读: 蓝色:浊化: 橙色:弱读 下划线_为浊化 口语蜕变(2017/7/6) 英 ...
- iOS与导航相关的都在这
// 设置导航背景图片 (一旦设置背景图片(变为不透明),透明层不起作用) [self.navigationBar setBackgroundImage:[UIImage imageNamed:@&q ...
- 服务器1M带宽同时能承受多少人在线
最近网站的流量一直在增长,这个肯定是好事.不过也有个麻烦的问题,目前本站用的的虚拟空间,每月流量30G,虽然95%的图片都已外链,但流量还是很吃紧,日均2000ip,4月份流量34g左右,单JS的响应 ...
- mongoose连接数据库的两种形式
不废话,直接 ---------------------- .如果你的应用程序只使用一个数据库, 应该使用 mongoose.connect. 如果您需要创建额外的连接,使用 mongoose.cre ...
- Tickets---hdu1260(简单dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1260 题意是有n个人排队买票,第 i 个人买票所需要的时间是a[i],这个人和 i-1 或者 i+1 ...