这题就是个模板题,不过我是第一次写dinic,好久没用链式前向星又不会了。。。

时间:9126ms

  1. #include<map>
  2. #include<set>
  3. #include<cmath>
  4. #include<queue>
  5. #include<stack>
  6. #include<vector>
  7. #include<cstdio>
  8. #include<cassert>
  9. #include<iomanip>
  10. #include<cstdlib>
  11. #include<cstring>
  12. #include<iostream>
  13. #include<algorithm>
  14. #define pi acos(-1)
  15. #define ll long long
  16. #define mod 1000000007
  17. #define ls l,m,rt<<1
  18. #define rs m+1,r,rt<<1|1
  19. #pragma comment(linker, "/STACK:1024000000,1024000000")
  20.  
  21. using namespace std;
  22.  
  23. const double g=10.0,eps=1e-;
  24. const int N=+,maxn=,inf=;
  25.  
  26. struct edge{
  27. int to,cap,next;
  28. }e[N<<];
  29. int s,t,cnt;
  30. int dis[N],cur[N];
  31. int head[N];
  32. void add(int u,int v,int c)//链式前向星
  33. {
  34. e[cnt].to=v;
  35. e[cnt].cap=c;
  36. e[cnt].next=head[u];
  37. head[u]=cnt++;
  38. }
  39. bool bfs()
  40. {
  41. memset(dis,-,sizeof dis);
  42. dis[s]=;
  43. queue<int>q;
  44. q.push(s);
  45. while(!q.empty()){
  46. int x=q.front();
  47. q.pop();
  48. for(int i=head[x];i!=-;i=e[i].next)//与x相连的所有点
  49. {
  50. int temp=e[i].to;
  51. if(dis[temp]==-&&e[i].cap>)//这一条边还有增广的可能
  52. {
  53. dis[temp]=dis[x]+;
  54. q.push(temp);
  55. }
  56. }
  57. }
  58. return dis[t]>-;//找到增广路
  59. }
  60. int dfs(int x,int cap)
  61. {
  62. if(x==t)return cap;
  63. int flow=;
  64. for(int i=head[x];i!=-;i=e[i].next)
  65. {
  66. int temp=e[i].to;
  67. if(dis[temp]==dis[x]+&&e[i].cap)
  68. {
  69. int f=dfs(temp,min(cap-flow,e[i].cap));
  70. e[i].cap-=f;//正向边
  71. e[i^].cap+=f;//反向边
  72. flow+=f;
  73. if(flow==cap)break;
  74. }
  75. }
  76. if(!flow)dis[x]=-;//不加会超时
  77. return flow;
  78. }
  79. int max_flow()
  80. {
  81. int flow=,f;
  82. while(bfs()){//还有增广路
  83. while((f=dfs(s,inf))>)flow+=f;//进行多路增广
  84. }
  85. return flow;
  86. }
  87. int main()
  88. {
  89. ios::sync_with_stdio(false);
  90. cin.tie();
  91. int k,n,m;
  92. cin>>k;
  93. while(k--){
  94. cin>>n>>m;
  95. int smin=inf,tmax=-inf;
  96. s=t=;
  97. int a,b,c;
  98. for(int i=;i<=n;i++)
  99. {
  100. cin>>a>>b;
  101. if(a<=smin)smin=a,s=i;
  102. if(a>=tmax)tmax=a,t=i;
  103. }
  104. cnt=;
  105. memset(head,-,sizeof head);
  106. while(m--){
  107. cin>>a>>b>>c;
  108. add(a,b,c);//正向边
  109. add(b,a,c);//反向边
  110. }
  111. int ans=max_flow();
  112. cout<<ans<<endl;
  113. }
  114. return ;
  115. }

hdu4280网络流之dinic的更多相关文章

  1. [知识点]网络流之Dinic算法

    // 此博文为迁移而来,写于2015年2月6日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vrg4.html      ...

  2. [无效]网络流之Dinic算法

    // 此博文为迁移而来,写于2015年2月6日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vrg4.html UPDA ...

  3. 「CODVES 1922 」骑士共存问题(二分图的最大独立集|网络流)&dinic

    首先是题目链接  http://codevs.cn/problem/1922/ 结果发现题目没图(心情复杂 然后去网上扒了一张图 大概就是这样了. 如果把每个点和它可以攻击的点连一条边,那问题就变成了 ...

  4. 网络流 KM dinic

    study from: https://blog.csdn.net/A_Comme_Amour/article/details/79356220 1. Edmonds-Karp 无优化 最坏时间复杂度 ...

  5. 初涉网络流[EK&dinic]

    主要还是板子 Edmonds-Karp 从S开始bfs,直到找到一条到达T的路径后将该路径增广,并重复这一过程. 在处理过程中,为了应对“找到的一条路径把其他路径堵塞”的情况,采用了建反向弧的方式来实 ...

  6. 网络流之Dinic算法

    初学网络流.存一下Dinic板子. 复杂度O(n^2*m) UVA - 1515 Pool construction 把每个草地与 S 相连,花费为dig,每个洞与 T 相连,花费为 然后对于每个两个 ...

  7. 网络流 之 dinic 算法

    网络流指的是:网络流(network-flows)是一种类比水流的解决问题方法.(类似于水管群,有一个源点(水无限多),和一个汇点,最大流就代表这个点水管群(边集)每秒最大能送道汇点的水量) 这个怎么 ...

  8. 初探网络流:dinic/EK算法学习笔记

    前记 这些是初一暑假的事: "都快初二了,连网络流都不会,你好菜啊!!!" from 某机房大佬 to 蒟蒻我. flag:--NOIP后要学网络流 咕咕咕------------ ...

  9. Secret Milking Machine POJ - 2455 网络流(Dinic算法---广搜判断+深搜增广)+时间优化+二分

    题意: 第一行输入N M C ,表示从1到N有M条无向边,现在要从1走到N 走C次完全不同的路径,求最长边的最小值.下面M行是从a点到b点的距离. 建图: 题上说从两点之间可以有多条边,问的是从1~N ...

随机推荐

  1. PHP unlink()函数,删除文件

    定义和用法 unlink() 函数删除文件. 若成功,则返回 true,失败则返回 false. 语法 unlink(filename,context) 参数 描述 filename 必需.规定要删除 ...

  2. thinkphp中 volist循环的 mod取值的问题

    <ul> <volist name="data" id="arr" key="k" mod="2"&g ...

  3. Fast and Accurate Traffic Matrix Measurement Using Adaptive Cardinality Counting

    paper-CaiPan.pdf http://conferences.sigcomm.org/sigcomm/2005/paper-CaiPan.pdf

  4. Nginx高级玩法

    1. Nginx获取自定义消息头 .nginx是支持读取非nginx标准的用户自定义header的,但是需要在http或者server下开启header的下划线支持: underscores_in_h ...

  5. Mybatis三剑客之mybatis-generator配置

    mybatis插件在这里: 然后把generatorConfig.xml文件放在resources下: <?xml version="1.0" encoding=" ...

  6. mysql 数据操作 多表查询 子查询 带比较运算符的子查询

    带比较运算符的子查询 #比较运算符:=.!=.>.>=.<.<=.<> #查询大于所有人平均年龄的员工名与年龄 思路 先拿到所有人的平均年龄然后 再用另外一条sql ...

  7. Winform 下使用WebBrowser的HTML编辑控件—WinHtmlControl 在win7 IE9下的问题

    问题是这样的,有一个需要用到富文本的地方,由于是winform的程序,而且程序是上一代老员工留下的,错误百出,现在要尽量修复,至少保证能正常使用,于是就开始一点点问题修复. 在win7 64位系统下出 ...

  8. Django restframwork获取列表详情

    z哎Django restframwork中就有一个类可以获取列表的详情内容,只有两行代码就可以搞定,在浏览器测试是ok的.但是这样的接口给前端,前端点击详情然后会将models.表名.objects ...

  9. 4.11 Routing -- Loading/Error Substates

    除了在上节中描述的技术,Ember路由器通过使用error和loading substates为自定义异步跳转提供强大而可重写的约定. 一.loading Substates 1. 在跳转过程中,Em ...

  10. 在GUI程序中使用控制台的两种方法

    win32程序启用控制台(控制台文件名:conout$,conin$,conerr$) //添加控制台,加入在程序构造函数中 AllocConsole(); freopen("conin$& ...