看错题了以为多组询问吓得不行……

其实还挺好想的,就是数据范围一点都不网络流。把U作为s,V作为t,以最小生成树为例,(U,V,L)要在最小生成树上,就要求所有边权比L小的边不能连通(U,V)所在的联通块。这样一来模型就很显然了,就是对所有边权<L的边建边(u,v,1)(v,u,1),然后最小割即可。建双向边是因为反正只会割掉一条……

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. #include<algorithm>
  6. using namespace std;
  7. const int N=2000005,inf=1e9;
  8. int n,m,h[N],cnt=1,le[N],s,t,len,ans;
  9. struct qw
  10. {
  11. int u,v,c;
  12. }a[N];
  13. bool cmp(const qw &a,const qw &b)
  14. {
  15. return a.c<b.c;
  16. }
  17. struct qwe
  18. {
  19. int ne,to,va;
  20. }e[N];
  21. int read()
  22. {
  23. int r=0,f=1;
  24. char p=getchar();
  25. while(p>'9'||p<'0')
  26. {
  27. if(p=='-')
  28. f=-1;
  29. p=getchar();
  30. }
  31. while(p>='0'&&p<='9')
  32. {
  33. r=r*10+p-48;
  34. p=getchar();
  35. }
  36. return r*f;
  37. }
  38. void add(int u,int v,int w)
  39. {
  40. cnt++;
  41. e[cnt].ne=h[u];
  42. e[cnt].to=v;
  43. e[cnt].va=w;
  44. h[u]=cnt;
  45. }
  46. void ins(int u,int v,int w)
  47. {
  48. add(u,v,w);
  49. add(v,u,w);
  50. }
  51. bool bfs()
  52. {
  53. queue<int>q;
  54. memset(le,0,sizeof(le));
  55. le[s]=1;
  56. q.push(s);
  57. while(!q.empty())
  58. {
  59. int u=q.front();
  60. q.pop();
  61. for(int i=h[u];i;i=e[i].ne)
  62. if(e[i].va>0&&!le[e[i].to])
  63. {
  64. le[e[i].to]=le[u]+1;
  65. q.push(e[i].to);
  66. }
  67. }
  68. return le[t];
  69. }
  70. int dfs(int u,int f)
  71. {
  72. if(!f||u==t)
  73. return f;
  74. int us=0;
  75. for(int i=h[u];i&&us<f;i=e[i].ne)
  76. if(e[i].va>0&&le[e[i].to]==le[u]+1)
  77. {
  78. int t=dfs(e[i].to,min(e[i].va,f-us));
  79. e[i].va-=t;
  80. e[i^1].va+=t;
  81. us+=t;
  82. }
  83. if(!us)
  84. le[u]=0;
  85. return us;
  86. }
  87. int dinic()
  88. {
  89. int re=0;
  90. while(bfs())
  91. re+=dfs(s,inf);
  92. return re;
  93. }
  94. int main()
  95. {
  96. n=read(),m=read();
  97. for(int i=1;i<=m;i++)
  98. a[i].u=read(),a[i].v=read(),a[i].c=read();
  99. s=read(),t=read(),len=read();
  100. sort(a+1,a+1+m,cmp);
  101. for(int i=1;i<=m;i++)
  102. {
  103. if(a[i].c<len)
  104. ins(a[i].u,a[i].v,1);
  105. else
  106. break;
  107. }
  108. ans=dinic();
  109. memset(h,0,sizeof(h));
  110. cnt=1;
  111. for(int i=m;i>=1;i--)
  112. {
  113. if(a[i].c>len)
  114. ins(a[i].u,a[i].v,1);
  115. else
  116. break;
  117. }
  118. printf("%d\n",ans+dinic());
  119. return 0;
  120. }

bzoj 2561: 最小生成树【最小割】的更多相关文章

  1. BZOJ 2561: 最小生成树(最小割)

    U,V能在最小(大)生成树上,当且仅当权值比它小(大)的边无法连通U,V. 两次最小割就OK了. --------------------------------------------------- ...

  2. BZOJ 2521 最小生成树(最小割)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2521 题意:每次能增加一条边的权值1,求最小代价让一条边保证在最小生成树里 思路:如果两个点中有环, ...

  3. BZOJ 2561 最小生成树 | 网络流 最小割

    链接 BZOJ 2561 题解 用Kruskal算法的思路来考虑,边(u, v, L)可能出现在最小生成树上,就是说对于所有边权小于L的边,u和v不能连通,即求最小割: 对于最大生成树的情况也一样.容 ...

  4. BZOJ.2521.[SHOI2010]最小生成树(最小割ISAP/Dinic)

    题目链接 一条边不变其它边减少可以看做一条边增加其它边不变. 假设要加的边lab为(A->B,v),那么肯定是要使除这条边外,A->B的每条路径上的最小权值都\(>v\),这样在连通 ...

  5. 【BZOJ-2521】最小生成树 最小割

    2521: [Shoi2010]最小生成树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 415  Solved: 242[Submit][Statu ...

  6. BZOJ 2561 最小生成树(最大流)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2561 题意:给定一个边带正权的连通无向图G= (V,E),其中N=|V|,M=|E|,N ...

  7. BZOJ2521:[SHOI2010]最小生成树(最小割)

    Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可 ...

  8. BZOJ2561最小生成树——最小割

    题目描述 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的边(u,v),那么需要删掉最 ...

  9. BZOJ2521[Shoi2010]最小生成树——最小割

    题目描述 Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的 ...

随机推荐

  1. HDU 1669 二分图多重匹配+二分

    Jamie's Contact Groups Time Limit: 15000/7000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/ ...

  2. 基于GDAL的栅格图像空间插值预处理

    转自 基于GDAL的栅格图像空间插值预处理——C语言版 基于GDAL的栅格图像预处理 前言 栅格数据和矢量数据构成空间数据的主要来源,怎样以开源方式读取并处理这些空间数据?目前有多种开源支持包,这里只 ...

  3. sklearn特征工程总结

    转自: http://www.cnblogs.com/jasonfreak/p/5448385.html https://www.zhihu.com/question/28641663/answer/ ...

  4. FTRL (Follow-the-regularized-Leader)算法

    Online gradient descent(OGD) produces excellent prediction accuracy with a minimum of computing reso ...

  5. History(历史)命令用法 15 例

    如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率.本文将通过实例的方式向你介绍 history 命令的 15 个用法. 使用 HISTTIMEFORMAT ...

  6. Ubuntu虚拟机+ROS+Android开发环境配置笔记

    Ubuntu虚拟机+ROS+Android开发环境配置笔记 虚拟机设置: 1.本地环境:Windows 7:VMWare:联网 2.虚拟环境 :Ubuntu 14.04. 比較稳定,且支持非常多ROS ...

  7. Linux学习笔记总结

    零.求人不如求已:        1. 在Linux中,文件,目录,驱动,命令,脚本都视为文件,也即一切皆file. 2.记住使用Linux 的关键就是六个字: 命令.选项.參数. 3.学会看帮助,不 ...

  8. 精通CSS:高级Web标准解决方式(第2版)

    精通CSS:高级Web标准解决方式(第2版) 跳转至: 导航. 搜索 层叠重要度:(也就是说.用户!important能够覆盖inline style) !important.用户>作者.最后是 ...

  9. 全栈JavaScript之路(十六)HTML5 HTMLDocument 类型的变化

    HTML5 扩展了 HTMLDocument, 添加了新的功能. 1.document.readState = 'loading' || 'complete'  //支持readyState 属性的浏 ...

  10. Redis实践系列丨Codis数据迁移原理与优化

    Codis介绍 Codis 是一种Redis集群的实现方案,与Redis社区的Redis cluster类似,基于slot的分片机制构建一个更大的Redis节点集群,对于连接到codis的Redis客 ...