题意:

     给你一个平面图,让你输出(1,1),(n ,n)的最小割..

思路:

      看完题想都没想直接最大流,结果TLE,想想也是 G<400*400,400*400*4>,这样的图超时不冤枉,后来在网上看了题解,都说是什么论文题目,果断去看论文结果没看懂,后来看了下别人的理解,自己再画画图大概知道是什么意思了,果断是看着没有证明的证明容易懂啊..

 把最小割转换成最短路是有限制条件的,就是这个图首先必须是平面图,然后要求的这两个点还必须是平面图最外侧的点,给你图解就明白了,感觉文字的东西越说越蒙..


看看上面的图就明白了吧,首先我们的目的就是要把s和t断开,也就是找一条横向的最短路径把他们切断,又因为路径的长度是根据容量来建的,所以最短路就是最小割..好想法...

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<queue>
  4.  
  5. #define N_node 165000
  6. #define N_edge 700000
  7. #define INF 1000000000

  8. using namespace std;
  9. typedef struct
  10. {
  11. int to ,cost ,next;
  12. }STAR;
  13.  
  14. STAR E[N_edge];
  15. int list[N_node] ,tot;
  16. int s_x[N_node];
  17. int map[405][405];
  18. void add(int a, int b ,int c)
  19. {
  20. E[++tot].to = b;
  21. E[tot].cost = c;
  22. E[tot].next = list[a];
  23. list[a] = tot;
  24.  
  25. E[++tot].to = a;
  26. E[tot].cost = c;
  27. E[tot].next = list[b];
  28. list[b] = tot;
  29. }
  30. void SPFA(int s ,int n)
  31. {
  32. for(int i = 0 ;i <= n ;i ++)
  33. s_x[i] = INF;
  34. int mark[N_node] = {0};
  35. mark[s] = 1;
  36. s_x[s] = 0;
  37. queue<int>q;
  38. q.push(s);
  39. while(!q.empty())
  40. {
  41. int tou ,xin;
  42. tou = q.front();
  43. q.pop();
  44. mark[tou] = 0;
  45. for(int k = list[tou] ;k ;k = E[k].next)
  46. {
  47. xin = E[k].to;
  48. if(s_x[xin] > s_x[tou] + E[k].cost)
  49. {
  50. s_x[xin] = s_x[tou] + E[k].cost;
  51. if(!mark[xin])
  52. {
  53. mark[xin] = 1;
  54. q.push(xin);
  55. }
  56. }
  57. }
  58. }
  59. return ;
  60. }
  61. int main ()
  62. {
  63. int n ,i ,j ,t;
  64. scanf("%d" ,&t);
  65. while(t--)
  66. {
  67. scanf("%d" ,&n);
  68. for(i = 1 ;i <= n ;i ++)
  69. for(j = 1 ;j <= n ;j ++)
  70. scanf("%d" ,&map[i][j]);
  71. n--;
  72. int ss = 0 ,tt = n * n + 1;
  73. memset(list ,0 ,sizeof(list));
  74. tot = 1;
  75. for(i = 1 ;i <= n ;i ++)
  76. for(j = 1 ;j <= n ;j ++)
  77. {
  78. int now = (i - 1) * n + j;
  79. int to1 = (i - 1) * n + j + 1;
  80. int to2 = (i - 1) * n + j + n;
  81. if(j != n) add(now ,to1 ,map[i][j+1]);
  82. if(i != n) add(now ,to2 ,map[i+1][j]);
  83. if(j == 1) add(ss ,now ,map[i][j]);
  84. if(i == n) add(ss ,now ,map[i+1][j]);
  85. if(j == n) add(now ,tt ,map[i][j+1]);
  86. if(i == 1) add(now ,tt ,map[i][j]);
  87. }
  88. SPFA(ss ,tt);
  89. printf("%d\n" ,s_x[tt]);
  90. }
  91. return 0;
  92. }

hdu3870 基于最短路的最小割的更多相关文章

  1. UVALive 3661 Animal Run(最短路解最小割)

    题意:动物要逃跑,工作人员要截断从START(左上角)到END(右下角)的道路,每条边权表示拦截该条道路需要多少工作人员.问最少需要多少人才能完成拦截. 通俗地讲,就是把图一分为二所造成消耗的最小值. ...

  2. BZOJ 1001: [BeiJing2006]狼抓兔子(s-t平面图+最短路求最小割)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 题意: 思路:这道题目是最小割题目,但是吧你直接套用Dinic是会超时的. 这里有种很奇妙的做 ...

  3. bzoj1266 [AHOI2006]上学路线route floyd建出最短路图+最小割

    1266: [AHOI2006]上学路线route Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 2490  Solved: 898[Submit][S ...

  4. 基于模糊聚类和最小割的层次化网格分割算法(Hierarchical Mesh Decomposition)

    网格分割算法是三维几何处理算法中的重要算法,具有许多实际应用.[Katz et al. 2003]提出了一种新型的层次化网格分割算法,该算法能够将几何模型沿着凹形区域分割成不同的几何部分,并且可以避免 ...

  5. hdu-5889-最短路+网络流/最小割

    Barricade Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  6. 基于模糊聚类和最小割的层次化三维网格分割算法(Hierarchical Mesh Decomposition)

    网格分割算法是三维几何处理算法中的重要算法,具有许多实际应用.[Katz et al. 2003]提出了一种新型的层次化网格分割算法,该算法能够将几何模型沿着凹形区域分割成不同的几何部分,并且可以避免 ...

  7. HDU - 3035 War(对偶图求最小割+最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3035 题意 给个图,求把s和t分开的最小割. 分析 实际顶点和边非常多,不能用最大流来求解.这道题要用 ...

  8. hdu3870-Catch the Theves(平面图最小割)

    Problem Description A group of thieves is approaching a museum in the country of zjsxzy,now they are ...

  9. 全局最小割Stoer-Wagner算法

    借鉴:http://blog.kongfy.com/2015/02/kargermincut/ 提到无向图的最小割问题,首先想到的就是Ford-Fulkerson算法解s-t最小割,通过Edmonds ...

随机推荐

  1. Microsoft Teams 最新功能发布:协作篇

    正在进行的2021年的Microsoft Ignite大会,发布了一系列跟Microsoft Teams相关的新功能,英文介绍请参考 https://techcommunity.microsoft.c ...

  2. 【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡

    目录 一.MHA+ProxySQL架构 二.快速搭建MHA环境 2.1 下载MHA镜像 2.2 编辑yml文件,创建MHA相关容器 2.3 安装docker-compose软件(若已安装,可忽略) 2 ...

  3. 微服务网关Zuul过滤器Filter

    Zuul本质 Zuul是一个网关,关于网关的介绍参考:亿级流量架构之网关设计思路.常见网关对比, 可知Zuul是一个业务网关, 而深入了解Zuul, 基本就是一系列过滤器的集合: Zuul的过滤器 下 ...

  4. LZZ高级程序语言设计之多重for循环

    public class Mq { public static void main(String args[]) { System.out.println("到底去还是不去呢?") ...

  5. 从设计模式角度看OkHttp源码

    前言 说到源码,很多朋友都觉得复杂,难理解. 但是,如果是一个结构清晰且完全解耦的优质源码库呢? OkHttp就是这样一个存在,对于这个原生网络框架,想必大家也看过很多很多相关的源码解析了. 它的源码 ...

  6. Min25筛求1-n内的素数和

    1 //#include <bits/stdc++.h> 2 #include<cstdio> 3 #include<cstring> 4 #include< ...

  7. python学习8 文件的操作

    本文拷贝了on testing 的<python之文件操作:文件的读写>,只做学习之用 python的文件读写通过 一.用open函数 二.对文件读写操作 三.读取文件位置定位 1. op ...

  8. Airtest简单上手讲解

    Airtest是网易开发的手机UI界面自动化测试工具,它原本的目的是通过所见即所得,截图点击等等功能,简化手机App图形界面测试代码编写工作. 安装和使用 由于本文的目的是介绍如何使用Airtest来 ...

  9. 前端嫌弃原生Swagger界面太low,于是我给她开通了超级VIP

    缘由 接口文档想必是许多开发小伙伴的噩梦,不仅要写详细,还要及时维护文档与后端代码保持一致,稍有没及时更新接口文档,前端同学肯定会抱怨后端同学给的文档与实际情况不一致. 于是,引入了Swagger组件 ...

  10. 【DB宝45】MySQL高可用之MGR+Consul架构部署

    目录 一.MGR+Consul架构简介 二.搭建MGR 2.1.申请3台MGR机器 2.2.3台主机安装MySQL环境 2.3.修改MySQL参数 2.4.重启MySQL环境 2.5.安装MGR插件( ...