Dinic算法学习&&HDU2063
http://www.cnblogs.com/SYCstudio/p/7260613.html
看这篇博文懂了一点,做题再体会体会吧
找了好久都没找到一个好用的模板……
我也是佛了。。最后决定用峰神的板子!
贴一个题解,HDU2063
- #include <algorithm>
- #include <iostream>
- #include <iomanip>
- #include <cstring>
- #include <climits>
- #include <complex>
- #include <fstream>
- #include <cassert>
- #include <cstdio>
- #include <bitset>
- #include <vector>
- #include <deque>
- #include <queue>
- #include <stack>
- #include <ctime>
- #include <set>
- #include <map>
- #include <cmath>
- using namespace std;
- typedef struct Edge {
- int u, v, c, next;
- }Edge;
- const int inf = 0x7f7f7f7f;
- const int maxn = ;
- #define maxm 30000
- #define ll long long
- #define mem(a,b) memset(a,b,sizeof a)
- inline int read()
- {
- int x=,f=;
- char ch=getchar();
- while(ch<''||ch>'')
- {
- if(ch=='-') f=-;
- ch=getchar();
- }
- while(ch>=''&&ch<='')
- {
- x=*x+ch-'';
- ch=getchar();
- }
- return x*f;
- }
- int n,m,s,t,maxflow,tot=,head[maxn],cur[maxn],h[maxn],q[maxn];
- struct edge{int go,next,v;}e[maxm];
- void ins(int x,int y,int z){e[++tot].go=y;e[tot].v=z;e[tot].next=head[x];head[x]=tot;}
- void insert(int x,int y,int z){ins(x,y,z);ins(y,x,);}
- bool bfs()
- {
- mem(h,-);
- int l=,r=;q[]=s;h[s]=;
- while(l<r)
- {
- int x=q[++l];
- for(int i=head[x];i;i=e[i].next)
- if(e[i].v&&h[e[i].go]==-)
- {
- h[e[i].go]=h[x]+;q[++r]=e[i].go;
- }
- }
- return h[t]!=-;
- }
- int dfs(int x,int f)
- {
- if(x==t) return f;
- int tmp,used=;
- for(int i=head[x];i;i=e[i].next)
- if(e[i].v&&h[e[i].go]==h[x]+)
- {
- tmp=dfs(e[i].go,min(e[i].v,f-used));
- e[i].v-=tmp;if(e[i].v)cur[x]=i;
- e[i^].v+=tmp;used+=tmp;
- if(used==f)return f;
- }
- if(!used) h[x]=-;
- return used;
- }
- void dinic()
- {
- maxflow=;
- while(bfs())
- {
- for (int i=s;i<=t;i++)cur[i]=head[i];maxflow+=dfs(s,inf);
- }
- }
- void init()
- {
- mem(head,);
- mem(h,-);
- }
- int main() {
- int k;
- while(~scanf("%d",&k)&&k){
- init();
- m=read();n=read();
- //源点到每个女生,每个男生到终点。
- int src=,des=m+m+n+;
- for(int i=;i<=m;++i)
- insert(src,i,);
- for(int i=;i<=n;++i)
- insert(m+i,des,);
- for(int i=;i<=k;++i)
- {
- int a=read(),b=read();
- insert(a,b+m,);
- }
- s=;t=des;
- dinic();
- cout<<maxflow<<endl;
- }
- return ;
- }
Dinic算法学习&&HDU2063的更多相关文章
- Dinic算法学习
转自 此文虽为转载,但博主的网络流就是从这开始的,认为写的不错 网络流基本概念 什么是网络流 在一个有向图上选择一个源点,一个汇点,每一条边上都有一个流量上限(以下称为容量),即经过这条边的流量不能超 ...
- 最大流EK算法/DINIC算法学习
之前一直觉得很难,没学过网络流,毕竟是基础知识现在重新来看. 定义一下网络流问题,就是在一幅有向图中,每条边有两个属性,一个是cap表示容量,一个是flow 表示流过的流量.我们要求解的问题就是从S点 ...
- dinic算法学习(以poj1273为例)
Dinic 算法模板 Dinic算法是一种比較easy实现的.相对照较快的最大流算法. 求最大流的本质,就是不停的寻找增广路径.直到找不到增广路径为止. 对于这个一般性的过程,Dinic算法的优化例 ...
- 学习笔记 --- 最大流Dinic算法
为与机房各位神犇同步,学习下网络流,百度一下发现竟然那么多做法,最后在两种算法中抉择,分别是Dinic和ISAP算法,问过 CA爷后得知其实效率上无异,所以决定跟随Charge的步伐学习Dinic,所 ...
- dinic算法求最大流的学习
http://trp.jlu.edu.cn/software/net/lssx/4/4.38.htm http://www.cnblogs.com/zen_chou/archive/0001/01/0 ...
- Dinic算法(研究总结,网络流)
Dinic算法(研究总结,网络流) 网络流是信息学竞赛中的常见类型,笔者刚学习了最大流Dinic算法,简单记录一下 网络流基本概念 什么是网络流 在一个有向图上选择一个源点,一个汇点,每一条边上都有一 ...
- 图论4——探索网络流的足迹:Dinic算法
1. 网络流:定义与简析 1.1 网络流是什么? 网络流是一种"类比水流的解决问题方法,与线性规划密切相关"(语出百度百科). 其实,在信息学竞赛中,简单的网络流并不需要太高深的数 ...
- 【最大流之Dinic算法】POJ1273 【 & 当前弧优化 & 】
总评一句:Dinic算法的基本思想比较好理解,就是它的当前弧优化的思想,网上的资料也不多,所以对于当前弧的优化,我还是费了很大的功夫的,现在也一知半解,索性就写一篇博客,来发现自己哪里的算法思想还没理 ...
- ACM/ICPC 之 Dinic算法(POJ2112)
Optimal Milking //二分枚举最大距离的最小值+Floyd找到最短路+Dinic算法 //参考图论算法书,并对BFS构建层次网络算法进行改进 //Time:157Ms Memory:65 ...
随机推荐
- you do not permission to access / no this server
最近在学习Linux下的httpd服务,自己写了一个虚拟主机的配置文件 重启之后,怎么访问都是出现以下的内容, do not permission to access / no this server ...
- Jongmah CodeForces - 1110D
传送门 题意:你有n个数字,范围[1, m],你可以选择其中的三个数字构成一个三元组,但是这三个数字必须是连续的或者相同的,每个数字只能用一次,问这n个数字最多构成多少个三元组? 题解:三个一模一样的 ...
- 006---Django静态文件配置
静态文件:Js.Css.Fonts.Image等 这个不难.在setting.py文件加一行 # 别名 用户在url地址栏输入127.0.0.1:8000/static/文件 可以直接访问static ...
- anr trace文件分析
测试给的trace文件好几万行,怎么看? 1.搜索 你的包名,看它报错误报在你代码的哪里 2.在你代码里面分析 还有,synchronized 就是用来防止多线程调用的,没有那么神奇.
- 分别用反射、编程接口的方式创建DataFrame
1.通过反射的方式 使用反射来推断包含特定数据类型的RDD,这种方式代码比较少,简洁,只要你会知道元数据信息时什么样,就可以使用了 代码如下: import org.apache.spark.sql. ...
- 用scrapy数据抓取实践
本文来自网易云社区 作者:沈高峰 数据分析中需要用到的不少数据都是需要进行抓取的,并且需要对抓取的数据进行解析之后存入数据库.scrapy是一个强大的爬虫框架,本文简单介绍下使用scrapy进行垂直抓 ...
- Python代码书写规范
Python 编码规范 一 代码编排1 缩进.4个空格的缩进(编辑器都可以完成此功能),不要使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在 ...
- 第一章 C++编程基础
第一章 C++编程基础 1.1 如何撰写C++程序 赋值 assignment复合赋值 (compound assignment) += 函数(function)是一块独立的程序代码序列(code s ...
- KMP与循环节相关题目
HDU 3746 Cyclic Nacklace ( KMP求最小循环节 ) len - nextval[len]即为最小循环节长度. #include <cstdio> #include ...
- Struts2+DAO层实现实例02——搭建DAO基本框架并与Struts2组合
实例内容 创建DAO(Data Access Oject)接口:BaseDAO 创建其实例化类:UserDAO 用于获取数据库struts中的userinfo表中的内容 创建User的Java Bea ...