【网络流#3】hdu 1532 - Dinic模板题
输入为m,n表示m条边,n个结点
记下来m行,每行三个数,x,y,c表示x到y的边流量最大为c
这道题的模板来自于网络
http://blog.csdn.net/sprintfwater/article/details/7913061
算法时间复杂度o(V^2*E)
关于这个模板:
Edge为前向星的边数,所以需要初始化Edge和head数组,其中head数组应初始化为-1
int dinic(int n,int s,int t);
n表示有n个点,这个版无所谓点从0开始还是从1开始,s表示源点,t表示汇点
很好的一个是,这个版的DFS使用的是模拟栈,防止爆栈
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<queue>
#include<string>
#include<sstream>
#define MAXN 200
#define MAXM 400
#define INF (1<<30)
#define eps 0.000001
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
using namespace std;
int i,j,k,n,m,x,y,T,num,w; const int inf = 0x3f3f3f3f;
struct edgenode
{
int from,to,next;
int cap;
}edge[MAXM];
int Edge,head[MAXN],ps[MAXN],dep[MAXN]; void addedge(int x,int y,int c)
{
edge[Edge].from=x;
edge[Edge].to=y;
edge[Edge].cap=c;
edge[Edge].next=head[x];
head[x]=Edge++; edge[Edge].from=y;
edge[Edge].to=x;
edge[Edge].cap=0;
edge[Edge].next=head[y];
head[y]=Edge++;
} int dinic(int n,int s,int t)
{
int tr,flow=0;
int i,j,k,l,r,top;
while(1){
memset(dep,-1,(n+1)*sizeof(int));
for(l=dep[ps[0]=s]=0,r=1;l!=r;)//BFS部分,将给定图分层
{
for(i=ps[l++],j=head[i];j!=-1;j=edge[j].next)
{
if (edge[j].cap&&-1==dep[k=edge[j].to])
{
dep[k]=dep[i]+1;ps[r++]=k;
if(k==t)
{
l=r;
break;
}
}
}
}
if(dep[t]==-1)break; for(i=s,top=0;;)//DFS部分
{
if(i==t)//当前点就是汇点时
{
for(k=0,tr=inf;k<top;++k)
if(edge[ps[k]].cap<tr)tr=edge[ps[l=k]].cap; for(k=0;k<top;++k)
edge[ps[k]].cap-=tr,edge[ps[k]^1].cap+=tr; flow+=tr;
i=edge[ps[top=l]].from;
} for(j=head[i];j!=-1;j=edge[j].next)//找当前点所指向的点
if(edge[j].cap&&dep[i]+1==dep[edge[j].to]) break; if(j!=-1)
{
ps[top++]=j;//当前点有所指向的点,把这个点加入栈中
i=edge[j].to;
}
else
{
if (!top) break;//当前点没有指向的点,回溯
dep[i]=-1;
i=edge[ps[--top]].from;
}
}
}
return flow;
} int main()
{
int T,cas,m,s,t,n,maxflow,i;
int x,y,c;
double ans;
while(~scanf("%d%d",&m,&n))
{
memset(head,-1,sizeof(head));
Edge=0;
for(i=0;i<m;i++)
{
scanf("%d%d%d",&x,&y,&c);
addedge(x,y,c);
}
printf("%d\n",dinic(n,1,n));
}
return 0;
}
【网络流#3】hdu 1532 - Dinic模板题的更多相关文章
- hdu 1532 Dinic模板(小白书)
hdu1532 输入n,m. n条边,m个点,之后给出a到b的容量,求1到m的最大流. 注意:Dinic只能调用一次,因为原理是改变cap的值,如果调用多次一样的,那么第一次会对,其余的都会是0,因为 ...
- HDU 2138 Miller-Rabin 模板题
求素数个数. /** @Date : 2017-09-18 23:05:15 * @FileName: HDU 2138 miller-rabin 模板.cpp * @Platform: Window ...
- HDU 1392 凸包模板题,求凸包周长
1.HDU 1392 Surround the Trees 2.题意:就是求凸包周长 3.总结:第一次做计算几何,没办法,还是看了大牛的博客 #include<iostream> #inc ...
- HDU 2586 (LCA模板题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2586 题目大意:在一个无向树上,求一条链权和. 解题思路: 0 | 1 / \ 2 3 ...
- HDU 2082 母函数模板题
找单词 Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Status De ...
- HDU 2087 kmp模板题
s为主串 t为模板串 求t的nextt 加const #include<stdio.h> #include<string.h> #include<algorithm> ...
- poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题
poj 1251 && hdu 1301 Sample Input 9 //n 结点数A 2 B 12 I 25B 3 C 10 H 40 I 8C 2 D 18 G 55D 1 E ...
- 最长回文 HDU - 3068 manacher 模板题
题意:找串的最长回文字串(连续) 题解:manacher版题 一些理解:首位加上任意两个字符是为了判断边界. 本算法主要是为了 1.省去奇偶分类讨论. 2.防止形如aaaaaaa的串使得暴力算法蜕化为 ...
- Saving Princess claire_(hdu 4308 bfs模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=4308 Saving Princess claire_ Time Limit: 2000/1000 MS (Jav ...
随机推荐
- 理解angularJS中作用域$scope
angularJS中作用域是什么 作用域(scope)是构成angularJS应用的核心基础,在整个框架中都被广泛使用,因此了解它如何工作是非常重要的 应用的作用域是和应用的数据模型相关联的,同时作用 ...
- [HttpClient]简单使用GET请求
package com.jerry.httpclient; import java.io.IOException; import org.apache.http.HttpEntity; import ...
- PHP进度条
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python日期时间处理
time模块 #-*- coding: utf-8 -*- """ #获取当前时间的时间戳(单位秒) time.time() #推迟指定秒数后再运行 time.sleep ...
- Rotate List 面试题
今天做了leetcode的Rotate List,刚开始头脑不清楚,写的乱七八糟的,后来改了下,提交了,能过,把代码贴出来. 做题的时候头脑要清楚,我刚开始做完的时候才发现我把向左向右移动弄反了,后来 ...
- spring mvc 自定义Handlermapping
上次大概写了个可以解决velocity 多视图的东西. 但是实际运用过程中又到处找了些资料看了下.这里 小计下: DispatcherServlet解析过程: ..1..HandlerMapping. ...
- Spark笔记-treeReduce、reduce、reduceByKey
参考资料: http://stackoverflow.com/questions/32281417/understadning-treereduce-in-spark http://stackover ...
- 转:Redis 的安装配置介绍
redis 是一个高性能的key-value数据库. redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用.它提供了Pyth ...
- linux浏览器,邮件客户端,输入法,双屏设置,应用软件,scrot -s截图,office
搜狗输入法linux版:http://pinyin.sogou.com/linux/help.php win/linux同时支持比较好用的浏览器:maxthon,firefox,maxthon,ope ...
- bzoj3575[Hnoi2014]道路堵塞
http://www.lydsy.com/JudgeOnline/problem.php?id=3575 总赶脚第二题总是比第三题难...... 好吧,这题一点思路都没有 听说用民科可以过掉大部分数据 ...