就是一个求最小割.

sol:

  数据比较大,n有20000,内部相连的边有20w,这么算算就要存八九十万的边,空间显然降不下来...然而打了dinic并不觉得快很多...最快跑到3800+ms

  然后跪一大爷2000ms出头,他只开了50w的边这是怎么做到的qwq...然后并没有什么显著不同啊他封在一个class里(我根本不知道这玩意儿只知道跟struct差不多)...难道是读入优化打丑了...

  附上他的代码地址:http://acm.hust.edu.cn/vjudge/problem/viewSource.action?id=4433085

Code:

  

  1. /*==========================================================================
  2. # Last modified: 2016-03-07 19:49
  3. # Filename: poj3469.cpp
  4. # Description:
  5. ==========================================================================*/
  6. #define me AcrossTheSky
  7. #include <cstdio>
  8. #include <cmath>
  9. #include <ctime>
  10. #include <string>
  11. #include <cstring>
  12. #include <cstdlib>
  13. #include <iostream>
  14. #include <algorithm>
  15.  
  16. #include <set>
  17. #include <map>
  18. #include <stack>
  19. #include <queue>
  20. #include <vector>
  21.  
  22. #define lowbit(x) (x)&(-x)
  23. #define FOR(i,a,b) for((i)=(a);(i)<=(b);(i)++)
  24. #define FORP(i,a,b) for(int i=(a);i<=(b);i++)
  25. #define FORM(i,a,b) for(int i=(a);i>=(b);i--)
  26. #define ls(a,b) (((a)+(b)) << 1)
  27. #define rs(a,b) (((a)+(b)) >> 1)
  28. #define getlc(a) ch[(a)][0]
  29. #define getrc(a) ch[(a)][1]
  30.  
  31. #define maxn 20015
  32. #define maxm 1000500
  33. #define pi 3.1415926535898
  34. #define _e 2.718281828459
  35. #define INF 1070000000
  36. using namespace std;
  37. typedef long long ll;
  38. typedef unsigned long long ull;
  39.  
  40. template<class T> inline
  41. void read(T& num) {
  42. bool start=false,neg=false;
  43. char c;
  44. num=0;
  45. while((c=getchar())!=EOF) {
  46. if(c=='-') start=neg=true;
  47. else if(c>='0' && c<='9') {
  48. start=true;
  49. num=num*10+c-'0';
  50. } else if(start) break;
  51. }
  52. if(neg) num=-num;
  53. }
  54. /*==================split line==================*/
  55. int S,T,n,m;
  56. int sume=1;
  57. struct Edge{
  58. int from,to,cap;
  59. }e[maxm];
  60. int first[maxn],d[maxn],next[maxm],cur[maxn];
  61. bool vis[maxn];
  62. queue<int> q;
  63. void addedge(int x,int y,int cap){
  64. sume++; e[sume].from=x; e[sume].to=y; e[sume].cap=cap;
  65. next[sume]=first[x]; first[x]=sume;
  66. sume++; e[sume].from=y; e[sume].to=x; e[sume].cap=0;
  67. next[sume]=first[y]; first[y]=sume;
  68. }
  69. int bfs(){
  70. for(int i=S;i<=T;i++) vis[i]=false;
  71. q.push(0); d[0]=0; vis[0]=true;
  72. while (!q.empty()){
  73. int now=q.front(); q.pop();
  74. for (int i=first[now];i;i=next[i])
  75. if (!vis[e[i].to] && e[i].cap){
  76. d[e[i].to]=d[now]+1;
  77. vis[e[i].to]=true;
  78. q.push(e[i].to);
  79. }
  80. }
  81. return vis[T];
  82. }
  83. int dfs(int now,int a){
  84. if (now==T || !a) return a;
  85. int f,flow=0;
  86. for (int & i=cur[now];i;i=next[i])
  87. if (d[now]+1==d[e[i].to] && (f=dfs(e[i].to,min(a,e[i].cap)))>0){
  88. flow+=f; a-=f; e[i].cap-=f; e[i^1].cap+=f;
  89. if (!a) break;
  90. }
  91. return flow;
  92.  
  93. }
  94. int dinic(){
  95. int flow=0;
  96. while (bfs()){
  97. FORP(i,0,n) cur[i]=first[i];
  98. flow+=dfs(S,INF);
  99. }
  100. return flow;
  101. }
  102. int main(){
  103. read(n); read(m);
  104. FORP(i,1,n) {
  105. int x;
  106. read(x); addedge(0,i,x);
  107. read(x); addedge(i,n+1,x);
  108. }
  109. FORP(i,1,m){
  110. int x,y,z; read(x); read(y); read(z);
  111. addedge(x,y,z); addedge(y,x,z);
  112. }
  113. S=0,T=n+1;
  114. printf("%d",dinic());
  115. }

POJ3469 & 最小割(最大流)模板的更多相关文章

  1. BZOJ1001:狼抓兔子(最小割最大流+vector模板)

    1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨, ...

  2. hdu4289 最小割最大流 (拆点最大流)

    最小割最大流定理:(参考刘汝佳p369)增广路算法结束时,令已标号结点(a[u]>0的结点)集合为S,其他结点集合为T=V-S,则(S,T)是图的s-t最小割. Problem Descript ...

  3. 【BZOJ-1797】Mincut 最小割 最大流 + Tarjan + 缩点

    1797: [Ahoi2009]Mincut 最小割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1685  Solved: 724[Submit] ...

  4. BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...

  5. 图论算法-最小费用最大流模板【EK;Dinic】

    图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...

  6. HDU3376 最小费用最大流 模板2

    Matrix Again Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)To ...

  7. hdu1569 方格取数(2) 最大点权独立集=总权和-最小点权覆盖集 (最小点权覆盖集=最小割=最大流)

    /** 转自:http://blog.csdn.net/u011498819/article/details/20772147 题目:hdu1569 方格取数(2) 链接:https://vjudge ...

  8. HDU1565 方格取数(1) —— 状压DP or 插头DP(轮廓线更新) or 二分图点带权最大独立集(最小割最大流)

    题目链接:https://vjudge.net/problem/HDU-1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others)    Memory L ...

  9. 最小割最大流定理&残量网络的性质

    最小割最大流定理的内容: 对于一个网络流图 $G=(V,E)$,其中有源点和汇点,那么下面三个条件是等价的: 流$f$是图$G$的最大流 残量网络$G_f$不存在增广路 对于$G$的某一个割$(S,T ...

随机推荐

  1. javascript - 内置对象 String/Date/Array/Math

    1.构建对象的方法 <script> //构建对象方法 //第1种 var people = new Object(); people.name = "iwen"; p ...

  2. 与你相遇好幸运,Waterline的多表关联

    >一对一关联 表示一个模型可能只与另一个模型关联.为了使模型知道它与其他哪些模型关联,外键必需包含在记录中.. http://imfly.github.io/sails-docs/concept ...

  3. Linux Shell 高级编程技巧1----深入讨论(awk、<<)

    1.深入讨论(awk.<<)    1.1.深入讨论awk        记录和域,模式和动作,正则表达式和元字符            基础教程中已经介绍        条件和逻辑操作符 ...

  4. 【翻译三】java-并发之线程对象和实现

    Thread Objects Each thread is associated with an instance of the class Thread. There are two basic s ...

  5. 【openGL】关于画点

    #include "stdafx.h" #include <GL/glut.h> #include <stdlib.h> #include <math ...

  6. 严重: End event threw exception java.lang.IllegalArgumentException: Can't convert argument: null

    堆栈信息: 2014-6-17 10:33:58 org.apache.tomcat.util.digester.Digester endElement 严重: End event threw exc ...

  7. android 入门-工序

    页面: 1.启动页 2.引导页 3.主页面 自定义控件: 轮播控件 轮播列表控件 弹出控件 加载控件 引导页控件 下拉刷新 上拉加载控件

  8. linux下mysql的简单使用

    写这篇的主要目的是记录一点mysql的基本使用方法,当然sql查询语句本来就有不少东西,这里就不一一介绍,这个网址有详细的教程(http://www.sdau.edu.cn/support/mysq_ ...

  9. CodeIgniter中驱动器的使用方法

    驱动器“Drivers”是CodeIgniter框架从2.0版本开始加入的新特性.正如中文版译者所言: 笔者看了这三篇英文参考,加上自己的一些理解,对官方文档关于驱动器的这一部分进行了一些补充. 1. ...

  10. ssh 免密码登陆

    远程ssh登陆服务器或者其他机器时或者scp时,需要输入密码,感觉很麻烦,于是研究如何免密码登陆. step1:Client端生成公钥和密钥 执行命令 ssh-keygen 进入目录~/.ssh里面, ...