给你岛的坐标求最西边到最东边的最大流

  1. /*
  2. 最大流模板
  3. sap
  4. */
  5. #include<stdio.h>
  6. #include<string.h>
  7. #include<algorithm>
  8. #include<iostream>
  9. using namespace std;
  10.  
  11. const int MAXN=;//点数的最大值
  12. const int MAXM=;//边数的最大值
  13. const int INF=0x3f3f3f3f;
  14.  
  15. struct Node
  16. {
  17. int from,to,next;
  18. int cap;
  19. }G[MAXM];
  20. int tol;
  21. int head[MAXN];
  22. int dep[MAXN];
  23. int gap[MAXN];//gap[x]=y :说明残留网络中dep[i]==x的个数为y
  24.  
  25. int n;//n是总的点的个数,包括源点和汇点
  26.  
  27. void init()
  28. {
  29. tol=;
  30. memset(head,-,sizeof(head));
  31. }
  32.  
  33. void build(int u,int v,int w)
  34. {
  35. G[tol].from=u;
  36. G[tol].to=v;
  37. G[tol].cap=w;
  38. G[tol].next=head[u];
  39. head[u]=tol++;
  40. G[tol].from=v;
  41. G[tol].to=u;
  42. G[tol].cap=;
  43. G[tol].next=head[v];
  44. head[v]=tol++;
  45. }
  46. void BFS(int st,int ed)
  47. {
  48. memset(dep,-,sizeof(dep));
  49. memset(gap,,sizeof(gap));
  50. gap[]=;
  51. int que[MAXN];
  52. int left,right;
  53. left=right=;
  54. dep[ed]=;
  55. que[right++]=ed;
  56. while(left!=right)
  57. {
  58. int u=que[left++];
  59. if(left==MAXN)left=;
  60. for(int i=head[u];i!=-;i=G[i].next)
  61. {
  62. int v=G[i].to;
  63. if(dep[v]!=-)continue;
  64. que[right++]=v;
  65. if(right==MAXN)right=;
  66. dep[v]=dep[u]+;
  67. ++gap[dep[v]];
  68. }
  69. }
  70. }
  71. int SAP(int st,int ed)
  72. {
  73. int res=;
  74. BFS(st,ed);
  75. int cur[MAXN];
  76. int S[MAXN];
  77. int top=;
  78. memcpy(cur,head,sizeof(head));
  79. int u=st;
  80. int i;
  81. while(dep[st]<n){
  82. if(u==ed){
  83. int temp=INF;
  84. int inser;
  85. for(i=;i<top;i++)
  86. if(temp>G[S[i]].cap){
  87. temp=G[S[i]].cap;
  88. inser=i;
  89. }
  90. for(i=;i<top;i++){
  91. G[S[i]].cap-=temp;
  92. G[S[i]^].cap+=temp;
  93. }
  94. res+=temp;
  95. top=inser;
  96. u=G[S[top]].from;
  97. }
  98. if(u!=ed&&gap[dep[u]-]==)//出现断层,无增广路
  99. break;
  100. for(i=cur[u];i!=-;i=G[i].next)
  101. if(G[i].cap!=&&dep[u]==dep[G[i].to]+)
  102. break;
  103. if(i!=-){
  104. cur[u]=i;
  105. S[top++]=i;
  106. u=G[i].to;
  107. }
  108. else{
  109. int min=n;
  110. for(i=head[u];i!=-;i=G[i].next){
  111. if(G[i].cap==)continue;
  112. if(min>dep[G[i].to]){
  113. min=dep[G[i].to];
  114. cur[u]=i;
  115. }
  116. }
  117. --gap[dep[u]];
  118. dep[u]=min+;
  119. ++gap[dep[u]];
  120. if(u!=st)u=G[S[--top]].from;
  121. }
  122. }
  123. return res;
  124. }
  125.  
  126. int main()
  127. {
  128. int st,ed;
  129. int m;
  130. int u,v,z;
  131. int T;
  132. scanf("%d",&T);
  133.  
  134. while(T--){
  135. init();
  136. scanf("%d%d",&n,&m);
  137. int minx=;
  138. int maxx=-;
  139. int x,y;
  140. for(int i=;i<=n;i++){
  141. scanf("%d%d",&x,&y);
  142. if(minx>x){
  143. minx=x;
  144. st=i;
  145. }
  146. if(maxx<x){
  147. maxx=x;
  148. ed=i;
  149. }
  150. }
  151. while(m--){
  152. scanf("%d%d%d",&u,&v,&z);
  153. build(u,v,z);
  154. build(v,u,z);
  155. }
  156. //n一定是点的总数,这是使用SAP模板需要注意的
  157. int ans=SAP(st,ed);
  158. printf("%d\n",ans);
  159. }
  160. return ;
  161. }

hdu 4280 最大流 sap模板的更多相关文章

  1. hdu 4280 最大流sap

    模板套起来 1 5 7 //5个结点,7个边 3 3 //坐标 3 0 3 1 0 0 4 5 1 3 3 //相连的结点和流 2 3 4 2 4 3 1 5 6 4 5 3 1 4 4 3 4 2 ...

  2. hdu 4280 最大流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4280 #pragma comment(linker, "/STACK:1024000000, ...

  3. hdu 3605 最大流sap+二进制思想(啊啊)

    /*因为n非常大如果正常建边的话会超内存,每种状态的数目共2--10种状状体记录起来,源点与状态建边权值为状态数,状态与星球建边,星球与汇点建边*/ #include<stdio.h> # ...

  4. HDU 4280 Island Transport(网络流,最大流)

    HDU 4280 Island Transport(网络流,最大流) Description In the vast waters far far away, there are many islan ...

  5. HDU 4280 Island Transport(无向图最大流)

    HDU 4280:http://acm.hdu.edu.cn/showproblem.php?pid=4280 题意: 比较裸的最大流题目,就是这是个无向图,并且比较卡时间. 思路: 是这样的,由于是 ...

  6. 【网络流#1】hdu 3549 - 最大流模板题

    因为坑了无数次队友 要开始学习网络流了,先从基础的开始,嗯~ 这道题是最大流的模板题,用来测试模板好啦~ Edmonds_Karp模板 with 前向星 时间复杂度o(V*E^2) #include& ...

  7. 网络流 最大流SAPkuangbin模板

    hdu 1532 求1~n的最大流 #include<stdio.h> #include<string.h> #include<algorithm> #includ ...

  8. HDU 4280 Island Transport(网络流)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=4280">http://acm.hdu.edu.cn/showproblem.php ...

  9. hdu 4289 最大流拆点

    大致题意:     给出一个又n个点,m条边组成的无向图.给出两个点s,t.对于图中的每个点,去掉这个点都需要一定的花费.求至少多少花费才能使得s和t之间不连通. 大致思路:     最基础的拆点最大 ...

随机推荐

  1. CSS的文本样式

    CSS的文本样式 1.颜色 2.文本对齐方式 3.首行缩进 4.行高 5.装饰 1. 文本位置 居中: text-align: center; 靠左: text-align: left; 靠右: te ...

  2. 用MyEclipse远程debug

    第一步 编辑 tomcat下的文件startup.sh文件,我的路径是 /root/apache-tomcat-6.0.24/bin/startup.sh 命令:vim startup.sh将decl ...

  3. Python标准库Random

    基本方法 获取一个[0,1)的随机浮点数: import random print(random.random()) #输出 0.6701488343121276 获取指定区间的随机浮点数: impo ...

  4. python实现进度条下载

    核心代码: for i in range(10): print('\r' + '>' * i, end='') 示例展示以搜狗输入法为例: import timeimport requestsi ...

  5. AntDesign(React)学习-2 第一个页面

    1.前面创建了第一个项目jgdemo,结构如下,使用TypeScript. 2.yarn start启动项目 3.点击GettingStarted是umi的官方网站 https://umijs.org ...

  6. HTML文本域标签

    textarea文本域 cols指定列数 rows行数(不够用会自动扩容)

  7. MySQL启动和停止

    MySQL视为大仓库,关闭的时候有权限有身份都无法进入使用的时候要保持启用状态 方式一: 计算机游击找到“管理”打开 左侧栏目中找到“服务和应用程序”打开 打开服务 找到MySQL...,右击.... ...

  8. 笔记(tm_springboot)

    1.@change="getFile($event)" 2.File imageFolder= new File(request.getServletContext().getRe ...

  9. PHP 中 16 个魔术方法详解

    PHP 中 16 个魔术方法详解   前言 PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __constru ...

  10. 【Python】time库