原文链接http://www.cnblogs.com/zhouzhendong/p/8686871.html

题目传送门 - BZOJ1001

题意

  长成上面那样的网格图求最小割。

  $n,m\leq 1000$

题解

  网格图先转个对偶图,然后SPFA跑一发就完事了。

  或者你可以这样理解。

  

  你要从红色区域到蓝色区域连一条路径,比如橙色或者绿色。

  (其中绿色就是答案)

  然后话费就是经过的边权值和。

  然后你会发现消耗一条边的权值所达到的效果是沟通那条边所分割的两个区域。于是发现,以空白区域为节点,原图的边为边,最短路就是答案。

代码

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N=2000005,M=1005;
  4. struct Gragh{
  5. int cnt,y[N*3],z[N*3],nxt[N*3],fst[N];
  6. void clear(){
  7. cnt=0;
  8. memset(fst,0,sizeof fst);
  9. }
  10. void add(int a,int b,int c){
  11. y[++cnt]=b,z[cnt]=c,nxt[cnt]=fst[a],fst[a]=cnt;
  12. }
  13. }g;
  14. int n,m,nm,S,T;
  15. void build(){
  16. int x,a,b;
  17. g.clear();
  18. for (int i=1;i<=n;i++)
  19. for (int j=1;j<m;j++){
  20. scanf("%d",&x);
  21. a=i==1?S:((i-2)*(m-1)+j);
  22. b=i==n?T:((i-1)*(m-1)+j+nm);
  23. g.add(a,b,x),g.add(b,a,x);
  24. }
  25. for (int i=1;i<n;i++)
  26. for (int j=1;j<=m;j++){
  27. scanf("%d",&x);
  28. a=j==m?S:((i-1)*(m-1)+j);
  29. b=j==1?T:((i-1)*(m-1)+j-1+nm);
  30. g.add(a,b,x),g.add(b,a,x);
  31. }
  32. for (int i=1;i<n;i++)
  33. for (int j=1;j<m;j++){
  34. scanf("%d",&x);
  35. a=(i-1)*(m-1)+j;
  36. b=(i-1)*(m-1)+j+nm;
  37. g.add(a,b,x),g.add(b,a,x);
  38. }
  39. }
  40. int vis[N],d[N],q[N],head,tail;
  41. int SPFA(int S,int T){
  42. int n=T,qmod=n+1,x,y;
  43. head=tail=0;
  44. memset(d,63,sizeof d);
  45. memset(vis,0,sizeof vis);
  46. d[S]=0,vis[S]=1,q[++tail]=S;
  47. while (head!=tail){
  48. vis[x=q[head=(head+1)%qmod]]=0;
  49. for (int i=g.fst[x];i;i=g.nxt[i]){
  50. y=g.y[i];
  51. if (d[y]>d[x]+g.z[i]){
  52. d[y]=d[x]+g.z[i];
  53. if (!vis[y])
  54. vis[q[tail=(tail+1)%qmod]=y]=1;
  55. }
  56. }
  57. }
  58. return d[T];
  59. }
  60. int main(){
  61. scanf("%d%d",&n,&m),nm=(n-1)*(m-1);
  62. S=2*nm+1,T=S+1;
  63. build();
  64. printf("%d",SPFA(S,T));
  65. return 0;
  66. }

  

BZOJ1001 [BeiJing2006]狼抓兔子 最小割 对偶图 最短路的更多相关文章

  1. BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 19528  Solved: 4818[Submit][ ...

  2. 【bzoj1001】[BeiJing2006]狼抓兔子 最小割+对偶图+最短路

    题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...

  3. [bzoj 1001][Beijing2006]狼抓兔子 (最小割+对偶图+最短路)

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...

  4. BZOJ1001: [BeiJing2006]狼抓兔子 (最小割转最短路)

    浅析最大最小定理在信息学竞赛中的应用---周东 ↑方法介绍 对于一个联通的平面图G(满足欧拉公式) 在s和t间新连一条边e; 然后建立一个原图的对偶图G*,G*中每一个点对应原图中每一个面,每一条边对 ...

  5. bzoj1001: [BeiJing2006]狼抓兔子 -- 最小割

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Description 现在小朋友们最喜欢的"喜羊羊与灰太狼 ...

  6. BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...

  7. BZOJ1001[BeiJing2006]狼抓兔子——最小割

    题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...

  8. bzoj 1001 [BeiJing2006]狼抓兔子——最小割转最短路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 #include<cstdio> #include<cstring& ...

  9. bzoj1001/luogu4001 狼抓兔子 (最小割/平面图最小割转对偶图最短路)

    平面图转对偶图:先在原图中加一个s->t的边,然后对每个面建一个点,对每条分隔两个面的边加一条连接这两个面对应点的边,边权等于原边权. 然后从刚才加的s->t分割出来的两面对应的两个点跑最 ...

随机推荐

  1. C++ DLL

    DLL(Dynamic Link Library)(1)DLL 的编制与具体的编程语言及编译器无关只要遵循约定的DLL接口规范和调用方式,用各种语言编写的DLL都可以相互调用.譬如Windows提供的 ...

  2. ubuntu中文版man

    man默认是英文的,但ubuntu的源里也有中文版的.以下是配置方法: 1)  终端输入sudo apt-get install manpages-zh 2)  安装后修改配置文件sudo gedit ...

  3. 【原创】Thinking in BigData (1)大数据简介

    提到大数据,就不得不提到Hadoop,提到Hadoop,就不得不提到Google公布的3篇研究论文:GFS.MapReduce.BigTable,Google确实是一家伟大的公司,开启了全球的大数据时 ...

  4. Python- 索引 B+数 比如书的目录

    1.索引 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题, 在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作, 因此对查询 ...

  5. 用docker快速搭建wordpress博客

      WordPress是一个非常著名的PHP编写的博客平台,发展到目前为止已经形成了一个庞大的网站平台系统.在WP上有规模庞大的插件和主题,可以帮助我们快速建立一个博客甚至网站. 在Windows上可 ...

  6. iOS 去除高德地图下方的 logo 图标

    [self.mapView.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, ...

  7. 基于AD5663的UV灯电压控制

    在开发臭氧发生器的时,我们使用UV灯来实现臭氧的产生.而UV灯的强度决定了臭氧产生的浓度,UV灯的光强则与其控制电压密切相关.所以我们要控制产生的臭氧的浓度就需要调节其控制电压.我们选择了AD5663 ...

  8. vuforia unity 识别图片出模型

    ARCamera设置: 然后设置ImageTarge

  9. 关于vue的基础概念

    vue-cli相当于脚手架 给你自动生成模板工程vue-router是 vue路由插件 支持你单页应用的vue-loader是webpack下loader插件 可以把.vue文件 输出成组件

  10. 【CSS】Bootstrap中select2+popover冲突

    网上搜索得到: It changes the position because the position is based on the popover's dimansions and select ...