Description

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

左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下三种类型的道路 
1:(x,y)<==>(x+1,y) 
2:(x,y)<==>(x,y+1) 
3:(x,y)<==>(x+1,y+1) 
道路上的权值表示这条路上最多能够通过的兔子数,道路是无向的. 左上角和右下角为兔子的两个窝,
开始时所有的兔子都聚集在左上角(1,1)的窝里,现在它们要跑到右下解(N,M)的窝中去,狼王开始伏击
这些兔子.当然为了保险起见,如果一条道路上最多通过的兔子数为K,狼王需要安排同样数量的K只狼,
才能完全封锁这条道路,你需要帮助狼王安排一个伏击方案,使得在将兔子一网打尽的前提下,参与的
狼的数量要最小。因为狼还要去找喜羊羊麻烦.

Input

第一行为N,M.表示网格的大小,N,M均小于等于1000.
接下来分三部分
第一部分共N行,每行M-1个数,表示横向道路的权值. 
第二部分共N-1行,每行M个数,表示纵向道路的权值. 
第三部分共N-1行,每行M-1个数,表示斜向道路的权值. 
输入文件保证不超过10M

Output

输出一个整数,表示参与伏击的狼的最小数量.

Sample Input

3 4
5 6 4
4 3 1
7 5 3
5 6 7 8
8 7 6 5
5 5 5
6 6 6

Sample Output

14
 
比较裸的一个题,记得建立双向边
建立双向变有个小技巧,就是正反边流量都为正数
 
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. #define N (2000000+10)
  6. using namespace std;
  7. struct node
  8. {
  9. int to,next,Flow;
  10. }edge[N<<];
  11. int n,m,x,s,e;
  12. int head[N],num_edge;
  13. int Depth[N];
  14. queue<int>q;
  15.  
  16. void add(int u,int v,int l)
  17. {
  18. edge[++num_edge].to=v;
  19. edge[num_edge].Flow=l;
  20. edge[num_edge].next=head[u];
  21. head[u]=num_edge;
  22. }
  23.  
  24. bool Bfs(int s,int e)
  25. {
  26. memset(Depth,,sizeof(Depth));
  27. Depth[s]=;
  28. q.push(s);
  29. while (!q.empty())
  30. {
  31. int x=q.front();
  32. q.pop();
  33. for (int i=head[x];i!=;i=edge[i].next)
  34. if (!Depth[edge[i].to] && edge[i].Flow>)
  35. {
  36. Depth[edge[i].to]=Depth[x]+;
  37. q.push(edge[i].to);
  38. }
  39. }
  40. return Depth[e]!=;
  41. }
  42.  
  43. int Dfs(int x,int low)
  44. {
  45. int Min,f=;
  46. if (x==e || low==) return low;
  47. for (int i=head[x];i!=;i=edge[i].next)
  48. if (edge[i].Flow> && Depth[edge[i].to]==Depth[x]+ && (Min=Dfs(edge[i].to,min(edge[i].Flow,low))))
  49. {
  50. edge[i].Flow-=Min;
  51. edge[((i-)^)+].Flow+=Min;
  52. f+=Min;
  53. low-=Min;
  54. if (low==) return f;
  55. }
  56. if (f==) Depth[x]=;
  57. return f;
  58. }
  59.  
  60. int Dinic(int s,int e)
  61. {
  62. int Ans=;
  63. while (Bfs(s,e))
  64. Ans+=Dfs(s,0x7fffffff);
  65. return Ans;
  66. }
  67.  
  68. int main()
  69. {
  70. scanf("%d%d",&n,&m);//n行m列
  71. s=,e=n*m;
  72. for (int i=;i<=n;++i)
  73. for (int j=;j<=m-;++j)
  74. {
  75.  
  76. scanf("%d",&x);
  77. add((i-)*m+j,(i-)*m+j+,x);
  78. add((i-)*m+j+,(i-)*m+j,x);
  79. }
  80. for (int i=;i<=n-;++i)
  81. for (int j=;j<=m;++j)
  82. {
  83. scanf("%d",&x);
  84. add((i-)*m+j,i*m+j,x);
  85. add(i*m+j,(i-)*m+j,x);
  86. }
  87. for (int i=;i<=n-;++i)
  88. for (int j=;j<=m-;++j)
  89. {
  90. scanf("%d",&x);
  91. add((i-)*m+j,i*m+j+,x);
  92. add(i*m+j+,(i-)*m+j,x);
  93. }
  94. printf("%d",Dinic(s,e));
  95. }

1001. [BJOI2006]狼抓兔子【最小割】的更多相关文章

  1. BZOJ 1001: [BeiJing2006]狼抓兔子 最小割

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓 ...

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

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

  3. [BJOI2006]狼抓兔子——最小割转对偶图最短路

    其实这个题直接Dinic跑最小割可过. (小优化是: 无向图建网络流,一条边不用建成4条,可以正反容量都是边权即可.完全等价 ) [无效]网络流之转换对偶图 一个巧妙的事情是,如果建边合适的话,最小割 ...

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

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

  5. BZOJ.1001.[BeiJing2006]狼抓兔子(最小割ISAP)

    题目链接 为什么这题网络流这么快,海拔那题就那么慢.. //119968kb 544ms //路不是有向的,所以要建四条边..既然如此就直接将反向边的流量设为w了.(or MLE...) #inclu ...

  6. BZOJ 1001 狼抓兔子 (最小割转化成最短路)

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

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

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

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

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

  9. [BJOI2006][bzoj1001] 狼抓兔子 [最小割]

    题面: 传送门 思路: 其实就是一道最小割的题目...... 我的写法加了两个优化,常数比较小,所以过掉了 一个是当前弧,一个是若当前点并不能流出去,那么标记dep为-1 听说正解是对偶图最短路?可以 ...

随机推荐

  1. .net core 2.2 部署CentOS7(3)安装Xshell操控CentOS7

    目录: .net core 2.2 部署CentOS7(1)安装虚拟机 .net core 2.2 部署CentOS7(2)给虚拟机安装CentOS7 .net core 2.2 部署CentOS7( ...

  2. spring boot在intellij idea下整合mybatis可能遇到的问题

    org.apache.ibatis.builder.BuilderException: Wrong namespace. Expected 'com.sc.starry_sky.dao.UserMap ...

  3. 南阳nyoj 509 因子和阶乘

    因子和阶乘 时间限制:1000 ms  |  内存限制:65535 KB 难度:2  http://acm.nyist.net/JudgeOnline/problem.php?pid=509 描述 给 ...

  4. Vue 中的 v-cloak 解读

    v-cloak 的作用和用法 用法: 这个指令保持在元素上直到关联实例结束编译.和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Must ...

  5. YII使用beanstalk队列

    转载于:http://blog.csdn.net/yao970953039/article/details/41821387 1.系统centos 我是直接使用yum install beanstal ...

  6. 移动web模拟客户端实现多方框输入密码效果

    不知道怎么描述标题,先看截图吧,大致的效果就是一个框输入一位密码. 最开始实现的思路是一个小方框就是一个type为password的input,每输入一位自动跳到下一位,删除一位就自动跳到前一位,an ...

  7. 润乾报表JSF FORM 标签中使用填报表解决方案

     需求 润乾报表的标签需要在jsf页面中和其他填报控件一起使用,润乾报表负责展现录入部分数据,并且这部分数据和页面的其它控件的数据存在前台和后台的交互. 问题 润乾报表在前台会生成自己的form, ...

  8. 抓取远程master分支到本地,并与UI分支合并

    1.pull (1)UI:  git add . git commit -m   git checkout master (2)master:  git pull origin master  git ...

  9. Redis 入门之基础

    1.安装 redis-windows redis服务端下载 redis客户端下载 redis官网 redis中文网 1.1 Window下安装 redis-server.exe redis.windo ...

  10. [翻译] DDExpandableButton

    DDExpandableButton https://github.com/ddebin/DDExpandableButton Purpose - 目的 DDExpandableButton is a ...