http://www.cnblogs.com/SYCstudio/p/7260613.html

看这篇博文懂了一点,做题再体会体会吧

找了好久都没找到一个好用的模板……

我也是佛了。。最后决定用峰神的板子!

贴一个题解,HDU2063

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <cstring>
  5. #include <climits>
  6. #include <complex>
  7. #include <fstream>
  8. #include <cassert>
  9. #include <cstdio>
  10. #include <bitset>
  11. #include <vector>
  12. #include <deque>
  13. #include <queue>
  14. #include <stack>
  15. #include <ctime>
  16. #include <set>
  17. #include <map>
  18. #include <cmath>
  19. using namespace std;
  20. typedef struct Edge {
  21. int u, v, c, next;
  22. }Edge;
  23. const int inf = 0x7f7f7f7f;
  24. const int maxn = ;
  25. #define maxm 30000
  26. #define ll long long
  27. #define mem(a,b) memset(a,b,sizeof a)
  28. inline int read()
  29. {
  30. int x=,f=;
  31. char ch=getchar();
  32. while(ch<''||ch>'')
  33. {
  34. if(ch=='-') f=-;
  35. ch=getchar();
  36. }
  37. while(ch>=''&&ch<='')
  38. {
  39. x=*x+ch-'';
  40. ch=getchar();
  41. }
  42. return x*f;
  43. }
  44. int n,m,s,t,maxflow,tot=,head[maxn],cur[maxn],h[maxn],q[maxn];
  45. struct edge{int go,next,v;}e[maxm];
  46. void ins(int x,int y,int z){e[++tot].go=y;e[tot].v=z;e[tot].next=head[x];head[x]=tot;}
  47. void insert(int x,int y,int z){ins(x,y,z);ins(y,x,);}
  48. bool bfs()
  49. {
  50. mem(h,-);
  51. int l=,r=;q[]=s;h[s]=;
  52. while(l<r)
  53. {
  54. int x=q[++l];
  55. for(int i=head[x];i;i=e[i].next)
  56. if(e[i].v&&h[e[i].go]==-)
  57. {
  58. h[e[i].go]=h[x]+;q[++r]=e[i].go;
  59. }
  60. }
  61. return h[t]!=-;
  62. }
  63. int dfs(int x,int f)
  64. {
  65. if(x==t) return f;
  66. int tmp,used=;
  67. for(int i=head[x];i;i=e[i].next)
  68. if(e[i].v&&h[e[i].go]==h[x]+)
  69. {
  70. tmp=dfs(e[i].go,min(e[i].v,f-used));
  71. e[i].v-=tmp;if(e[i].v)cur[x]=i;
  72. e[i^].v+=tmp;used+=tmp;
  73. if(used==f)return f;
  74. }
  75. if(!used) h[x]=-;
  76. return used;
  77. }
  78. void dinic()
  79. {
  80. maxflow=;
  81. while(bfs())
  82. {
  83. for (int i=s;i<=t;i++)cur[i]=head[i];maxflow+=dfs(s,inf);
  84. }
  85. }
  86. void init()
  87. {
  88. mem(head,);
  89. mem(h,-);
  90. }
  91. int main() {
  92. int k;
  93. while(~scanf("%d",&k)&&k){
  94. init();
  95. m=read();n=read();
  96. //源点到每个女生,每个男生到终点。
  97. int src=,des=m+m+n+;
  98. for(int i=;i<=m;++i)
  99. insert(src,i,);
  100. for(int i=;i<=n;++i)
  101. insert(m+i,des,);
  102. for(int i=;i<=k;++i)
  103. {
  104. int a=read(),b=read();
  105. insert(a,b+m,);
  106. }
  107. s=;t=des;
  108. dinic();
  109. cout<<maxflow<<endl;
  110. }
  111. return ;
  112. }

Dinic算法学习&&HDU2063的更多相关文章

  1. Dinic算法学习

    转自 此文虽为转载,但博主的网络流就是从这开始的,认为写的不错 网络流基本概念 什么是网络流 在一个有向图上选择一个源点,一个汇点,每一条边上都有一个流量上限(以下称为容量),即经过这条边的流量不能超 ...

  2. 最大流EK算法/DINIC算法学习

    之前一直觉得很难,没学过网络流,毕竟是基础知识现在重新来看. 定义一下网络流问题,就是在一幅有向图中,每条边有两个属性,一个是cap表示容量,一个是flow 表示流过的流量.我们要求解的问题就是从S点 ...

  3. dinic算法学习(以poj1273为例)

    Dinic 算法模板  Dinic算法是一种比較easy实现的.相对照较快的最大流算法. 求最大流的本质,就是不停的寻找增广路径.直到找不到增广路径为止. 对于这个一般性的过程,Dinic算法的优化例 ...

  4. 学习笔记 --- 最大流Dinic算法

    为与机房各位神犇同步,学习下网络流,百度一下发现竟然那么多做法,最后在两种算法中抉择,分别是Dinic和ISAP算法,问过 CA爷后得知其实效率上无异,所以决定跟随Charge的步伐学习Dinic,所 ...

  5. dinic算法求最大流的学习

    http://trp.jlu.edu.cn/software/net/lssx/4/4.38.htm http://www.cnblogs.com/zen_chou/archive/0001/01/0 ...

  6. Dinic算法(研究总结,网络流)

    Dinic算法(研究总结,网络流) 网络流是信息学竞赛中的常见类型,笔者刚学习了最大流Dinic算法,简单记录一下 网络流基本概念 什么是网络流 在一个有向图上选择一个源点,一个汇点,每一条边上都有一 ...

  7. 图论4——探索网络流的足迹:Dinic算法

    1. 网络流:定义与简析 1.1 网络流是什么? 网络流是一种"类比水流的解决问题方法,与线性规划密切相关"(语出百度百科). 其实,在信息学竞赛中,简单的网络流并不需要太高深的数 ...

  8. 【最大流之Dinic算法】POJ1273 【 & 当前弧优化 & 】

    总评一句:Dinic算法的基本思想比较好理解,就是它的当前弧优化的思想,网上的资料也不多,所以对于当前弧的优化,我还是费了很大的功夫的,现在也一知半解,索性就写一篇博客,来发现自己哪里的算法思想还没理 ...

  9. ACM/ICPC 之 Dinic算法(POJ2112)

    Optimal Milking //二分枚举最大距离的最小值+Floyd找到最短路+Dinic算法 //参考图论算法书,并对BFS构建层次网络算法进行改进 //Time:157Ms Memory:65 ...

随机推荐

  1. you do not permission to access / no this server

    最近在学习Linux下的httpd服务,自己写了一个虚拟主机的配置文件 重启之后,怎么访问都是出现以下的内容, do not permission to access / no this server ...

  2. Jongmah CodeForces - 1110D

    传送门 题意:你有n个数字,范围[1, m],你可以选择其中的三个数字构成一个三元组,但是这三个数字必须是连续的或者相同的,每个数字只能用一次,问这n个数字最多构成多少个三元组? 题解:三个一模一样的 ...

  3. 006---Django静态文件配置

    静态文件:Js.Css.Fonts.Image等 这个不难.在setting.py文件加一行 # 别名 用户在url地址栏输入127.0.0.1:8000/static/文件 可以直接访问static ...

  4. anr trace文件分析

    测试给的trace文件好几万行,怎么看? 1.搜索 你的包名,看它报错误报在你代码的哪里 2.在你代码里面分析 还有,synchronized 就是用来防止多线程调用的,没有那么神奇.

  5. 分别用反射、编程接口的方式创建DataFrame

    1.通过反射的方式 使用反射来推断包含特定数据类型的RDD,这种方式代码比较少,简洁,只要你会知道元数据信息时什么样,就可以使用了 代码如下: import org.apache.spark.sql. ...

  6. 用scrapy数据抓取实践

    本文来自网易云社区 作者:沈高峰 数据分析中需要用到的不少数据都是需要进行抓取的,并且需要对抓取的数据进行解析之后存入数据库.scrapy是一个强大的爬虫框架,本文简单介绍下使用scrapy进行垂直抓 ...

  7. Python代码书写规范

    Python 编码规范 一 代码编排1 缩进.4个空格的缩进(编辑器都可以完成此功能),不要使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在 ...

  8. 第一章 C++编程基础

    第一章 C++编程基础 1.1 如何撰写C++程序 赋值 assignment复合赋值 (compound assignment) += 函数(function)是一块独立的程序代码序列(code s ...

  9. KMP与循环节相关题目

    HDU 3746 Cyclic Nacklace ( KMP求最小循环节 ) len - nextval[len]即为最小循环节长度. #include <cstdio> #include ...

  10. Struts2+DAO层实现实例02——搭建DAO基本框架并与Struts2组合

    实例内容 创建DAO(Data Access Oject)接口:BaseDAO 创建其实例化类:UserDAO 用于获取数据库struts中的userinfo表中的内容 创建User的Java Bea ...