Time Limit: 15 Sec  Memory Limit: 162 MB
Submit: 19759  Solved: 4883

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

HINT

2015.4.16新加数据一组,可能会卡掉从前可以过的程序。

Source

显然是一个最小割问题。

然而数据范围太大了,最小割妥妥会TLE

考虑把最小割转化为最短路:一个平面图的最小割问题可以转化成它的对偶图的最短路问题。

平面图中的每个面对应对偶图中的一个点,在这个问题中,可以将每个小三角形当成一个点,其左上角顶点是入点,右下角顶点是出点(网络流拆点思想)。

建边求最短路即可。

顺便测试了两种dijkstra,没注释掉的这个版本比注释掉的版本慢了约200ms,似乎大常数的inq判断比大常数的优先队列更耗时间?

  1. /*by SilverN*/
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<cstring>
  5. #include<cstdio>
  6. #include<cmath>
  7. #include<vector>
  8. #include<queue>
  9. using namespace std;
  10. const int mxn=;
  11. int read(){
  12. int x=,f=;char ch=getchar();
  13. while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
  14. while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
  15. return x*f;
  16. }
  17. struct edge{int v,nxt,w;}e[mxn*];
  18. int hd[mxn],mct=;
  19. inline void add_edge(int u,int v,int w){
  20. e[++mct].v=v;e[mct].nxt=hd[u];e[mct].w=w;hd[u]=mct;return;
  21. }
  22. inline void insert(int u,int v,int w){
  23. add_edge(u,v,w);add_edge(v,u,w);return;
  24. }
  25. int n,m,S,T;
  26. inline int id(int x,int y,int k){return ((x-)*(m-)+y)*-(k^);}
  27. //inline int id(int x,int y,int k){return (x-1)*(m-1)*2+y*2-(k^1);}
  28. /*
  29. struct dst{int u,dis;};
  30. struct cmp{bool operator ()(const dst a,const dst b){return a.dis>b.dis;}};
  31. priority_queue<dst,vector<dst>,cmp>q;
  32. int dis[mxn];
  33. void dij(){
  34. memset(dis,0x3f,sizeof dis);
  35. while(!q.empty())q.pop();
  36. q.push((dst){S,0});
  37. dis[S]=0;
  38. while(!q.empty()){
  39. dst now=q.top();q.pop();
  40. int u=now.u;if(dis[u]<now.dis)continue;
  41. for(int i=hd[u];i;i=e[i].nxt){
  42. int v=e[i].v;
  43. if(dis[v]>dis[u]+e[i].w){
  44. dis[v]=dis[u]+e[i].w;
  45. q.push((dst){v,dis[v]});
  46. }
  47. }
  48. }
  49. return;
  50. }
  51. */
  52. int dis[mxn];
  53. struct cmp{bool operator ()(const int a,const int b){return dis[a]>dis[b];}};
  54. priority_queue<int,vector<int>,cmp>q;
  55. bool inq[mxn];
  56. void dij(){
  57. memset(dis,0x3f,sizeof dis);
  58. while(!q.empty())q.pop();
  59. q.push(S);
  60. dis[S]=;inq[S]=;
  61. while(!q.empty()){
  62. int u=q.top();q.pop();inq[u]=;
  63. for(int i=hd[u];i;i=e[i].nxt){
  64. int v=e[i].v;
  65. if(dis[v]>dis[u]+e[i].w){
  66. dis[v]=dis[u]+e[i].w;
  67. if(!inq[v]){
  68. inq[v]=;
  69. q.push(v);
  70. }
  71. }
  72. }
  73. }
  74. return;
  75. }
  76. int main(){
  77. int i,j,w;
  78. n=read();m=read();
  79. S=(n-)*(m-)*+;T=S+;
  80. for(i=;i<=n;i++){
  81. for(j=;j<m;j++){
  82. w=read();
  83. if(i==)insert(S,id(i,j,),w);
  84. else if(i==n)insert(id(i-,j,),T,w);
  85. else insert(id(i,j,),id(i-,j,),w);
  86. }
  87. }
  88. for(i=;i<n;i++){
  89. for(j=;j<=m;j++){
  90. w=read();
  91. if(j==)insert(T,id(i,j,),w);
  92. else if(j==m)insert(id(i,j-,),S,w);
  93. else insert(id(i,j-,),id(i,j,),w);
  94. }
  95. }
  96. for(i=;i<n;i++)
  97. for(j=;j<m;j++){
  98. w=read();
  99. insert(id(i,j,),id(i,j,),w);
  100. }
  101. dij();
  102. printf("%d\n",dis[T]);
  103. return ;
  104. }

Bzoj1001 [BeiJing2006]狼抓兔子的更多相关文章

  1. BZOJ1001 BeiJing2006 狼抓兔子 【网络流-最小割】*

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

  2. [BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)

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

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

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

  4. BZOJ1001: [BeiJing2006]狼抓兔子【最短路+对偶图】

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Se ...

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

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

  6. bzoj1001: [BeiJing2006]狼抓兔子(初识是你最小割)

    1001: [BeiJing2006]狼抓兔子 题目:传送门 题解: 听说这题当初是大难题...可惜当年没有网络流hahahha 现在用网络流的思想就很容易解决了嘛 给什么连什么,注意是双向边,然后跑 ...

  7. BZOJ1001: [BeiJing2006]狼抓兔子(优化的dinic或转化对偶图求最短路)

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

  8. [bzoj1001][BeiJing2006]狼抓兔子_网络流_最小割转对偶图

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

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

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

随机推荐

  1. 嵌入支付宝SDK,出现“LaunchServices: ERROR: There is no registered handler for URL scheme alipay”错误

    应用项目中嵌入支付宝SDK,在模拟器运行app后,会出现“LaunchServices: ERROR: There is no registered handler for URL scheme al ...

  2. wcf的诡异问题

    最近在做工作流设计器用的silverlight 使用wcf服务. 过程中遇到了两个奇怪的问题. 1. 出现整型参数无法传递到服务器的情况 2.出现反序列化失败的情况. 经过仔细排查发现 每个属性都有一 ...

  3. node基础06:回调函数

    1.Node异步编程 Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,No ...

  4. hadoop 2.6伪分布安装

    hadoop 2.6的“伪”分式安装与“全”分式安装相比,大部分操作是相同的,主要区别在于不用配置slaves文件,而且其它xxx-core.xml里的参数很多也可以省略,下面是几个关键的配置: (安 ...

  5. win8.1环境下安装arduino驱动问题解决方案

    1. Windows 键+ R, 输入 shutdown.exe /r /o /f /t 00 2.此时电脑会自动重启,进入一下画面,选择Troubleshoot (转载请注明原处:http://ww ...

  6. 纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!

    前言 FineUI控件库发展至今已经有 5 个年头,目前论坛注册的QQ会员 5000 多人,捐赠用户 500 多人(捐赠用户转化率达到10%以上,在国内开源领域相信这是一个梦幻数字!也足以证明Fine ...

  7. opencv8-GPU之相似性计算

    Opencv支持GPU计算,并且包含成一个gpu类用来方便调用,所以不需要去加上什么__global__什么的很方便,不过同时这个类还是有不足的,待opencv小组的更新和完善. 这里先介绍在之前的& ...

  8. 后记:Cookie安全大辩论总结

    前天,我发布在博客园上的某知名电商网站的Cookie漏洞引发园友们的热议,学到了很多知识,现在整理一下其中比较激烈的技术讨论.谁对谁错每个人自己心中都有一把称,很多时候都是我无法说服你,你也无法说服我 ...

  9. 突破自我,开源NetWorkSocket通讯组件

    前言 在<化茧成蝶,开源NetWorkSocket通讯组件>发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经过一些时间的思考,决定将NetworkSoc ...

  10. .net 估计要死在你手里了

    最近不太爽,想换工作,上这些知名的招聘网站,一搜 .net 心凉了一截,很少有大公司用.net,工资也不是很高. 不用我多说什么,想必很多人应该有类似经历,只是打了牙往肚子里咽. 来两副图: 最近用滴 ...