BZOJ1001 BeiJing2006 狼抓兔子


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新加数据一组,可能会卡掉从前可以过的程序。


最小割模型还是挺好看出来的

然后转化成最大流,但我不知道为什么又是MLE又是TLE。。

然后网上到说如果dinic在DFS的时候flow为0就可以直接把这个点的d值设为0,确实可以极大程度的优化时间

然后注意一下这个是无向图,正边和反边的cap都应该设成cap值

挺好的一道题


  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define N 1000001
  4. #define INF 0x3f3f3f3f
  5. struct Edge{int v,next,cap,flow;};
  6. struct Dinic{
  7. int s,t,tot,vis[N],d[N];
  8. Edge E[N*6];int head[N];
  9. Dinic(){tot=1;}
  10. void add(int u,int v,int cap){
  11. E[++tot]=((Edge){v,head[u],cap,0});head[u]=tot;
  12. E[++tot]=((Edge){u,head[v],cap,0});head[v]=tot;//*******
  13. }
  14. bool bfs(){
  15. memset(vis,0,sizeof(vis));
  16. memset(d,0,sizeof(d));
  17. queue<int> Q;
  18. Q.push(s);
  19. vis[s]=1;
  20. while(!Q.empty()){
  21. int u=Q.front();Q.pop();
  22. for(int i=head[u];i;i=E[i].next){
  23. if(!vis[E[i].v]&&E[i].cap>E[i].flow){
  24. vis[E[i].v]=1;
  25. d[E[i].v]=d[u]+1;
  26. Q.push(E[i].v);
  27. }
  28. }
  29. }
  30. return vis[t];
  31. }
  32. int dfs(int u,int a){
  33. if(u==t||!a)return a;
  34. int flow=0;
  35. for(int i=head[u];i;i=E[i].next){
  36. if(d[E[i].v]!=d[u]+1)continue;
  37. int f=dfs(E[i].v,min(E[i].cap-E[i].flow,a));
  38. if(!f)continue;
  39. E[i].flow+=f;
  40. E[i^1].flow-=f;
  41. flow+=f;
  42. a-=f;
  43. if(!a)return flow;
  44. }
  45. if(!flow)d[u]=0;//*************
  46. return flow;
  47. }
  48. int Maxflow(){
  49. int flow=0;
  50. while(bfs())flow+=dfs(s,INF);
  51. return flow;
  52. }
  53. }dinic;
  54. int n,m,cap;
  55. int getind(int x,int y){return (x-1)*m+y;}
  56. int main(){
  57. scanf("%d%d",&n,&m);
  58. dinic.s=1;dinic.t=n*m;
  59. for(int i=1;i<=n;i++)
  60. for(int j=1;j<m;j++){
  61. scanf("%d",&cap);
  62. dinic.add(getind(i,j),getind(i,j+1),cap);
  63. }
  64. for(int i=1;i<n;i++)
  65. for(int j=1;j<=m;j++){
  66. scanf("%d",&cap);
  67. dinic.add(getind(i,j),getind(i+1,j),cap);
  68. }
  69. for(int i=1;i<n;i++)
  70. for(int j=1;j<m;j++){
  71. scanf("%d",&cap);
  72. dinic.add(getind(i,j),getind(i+1,j+1),cap);
  73. }
  74. printf("%d",dinic.Maxflow());
  75. return 0;
  76. }

BZOJ1001 BeiJing2006 狼抓兔子 【网络流-最小割】*的更多相关文章

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

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

  2. BZOJ_2001_[BeiJing2006]狼抓兔子_最小割转对偶图

    BZOJ_2001_[BeiJing2006]狼抓兔子 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 分析:思路同NOI2010海拔. ...

  3. BZOJ1001 BJOI2006狼抓兔子(最小割+最短路)

    显然答案就是最小割.直接跑dinic也能过,不过显得不太靠谱. 考虑更正确的做法.作为一个平面图,如果要把他割成两半,那么显然可以用一条曲线覆盖且仅覆盖所有割边.于是我们把空白区域看成点,隔开他们的边 ...

  4. 【BZOJ】1001: [BeiJing2006]狼抓兔子(最小割 / 对偶图)

    题目 传送门:QWQ 分析 显然答案是最小割. 然后dinic卡一卡过去了. 其实是懒得写转对偶图:正解 (dinic原来写的是vector,后来改的比较鬼畜 代码 #include <bits ...

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

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 题意:中文. 思路:很明显是最小割,转化为最大流做.一开始看那么多点,但还是试了一下,居然过了 ...

  6. bzoj 1001: [BeiJing2006]狼抓兔子 平面图最小割

    平面图跑最大流 可以转换为其对偶图跑最短路 一个环对应一个割  找到最小环(即最短路)极为所求,注意辅助边的建立 加入读入优化  不过时间还是一般  估计是dij写的不好   大神勿喷~~~ /*** ...

  7. [Bzoj1001][BeiJing2006]狼抓兔子(网络流/对偶图)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 看到大佬们都是对偶图过的,写了个最大流水过去了QAQ,网络流的无向图直接建双向边( ...

  8. 2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割)

    2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割) https://www.luogu.com.cn/problem/P4001 题意: 把图分成两部分需要的最 ...

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

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

随机推荐

  1. 一款简单易用的.Net 断言测试框架 : Shouldly

    GitHub地址:https://github.com/shouldly/shouldly Shouldly的官方文档:http://docs.shouldly-lib.net/ Nuget安装: 在 ...

  2. iOS学习-字符串的删除替换

    字符串的常用处理,删除,替换.记录一下,方便查找. -------------------------------------------------------------------------- ...

  3. html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例

    这篇文章主要介绍了html5本地存储的localstorage .本地数据库.sessionStorage简单使用示例,需要的朋友可以参考下 html5的一个非常cool的功能,就是web stora ...

  4. led,key通用IO的端口

    1 注意通用IO端口, GPBCON 只能控制一个GPBDAT位(对应的位),而GPBUP可以使能GPBCON.

  5. Maven 三种archetype说明

    新建Maven project项目时,需要选择archetype. 那么,什么是archetype? archetype的意思就是模板原型的意思,原型是一个Maven项目模板工具包.一个原型被定义为从 ...

  6. jmeter-02 JMeter 生成HTML性能报告

    Report Dashboard: JMeter3.0 后提供的扩展模块,支持从测试计划中获取图形和统计数据,生成HTML页面格式图形化报告. 快速入门演示 一.准备测试计划 mock_api .jm ...

  7. 第六天 vim编辑的使用和Xmanager远程工具的使用

    1.1 vim主要模式介绍,vim命令模式 使用命令 vim [file name] 有三种主要模式:命令模式.编辑模式.命令行模式 在vim中主要使用快捷键进行操作,详见:http://www.cn ...

  8. p标签多行文字内容实现上下垂直居中兼容ie8

    之前实现上下居中一般都是用height和line-height的来设置. 今天在修改样式的时候,p标签的文字内容可能是一行也可能是两行, 所以用height和line-height就没效果. 今天找到 ...

  9. [Web UI]对比Angular/jQueryUI/Extjs:没有一个框架是万能的

    Angular不能做什么?对比Angular/jQueryUI/Extjs 框架就好比兵器,你得明白你手里拿的是屠龙刀还是倚天剑,刀法主要是砍,剑法主要是刺.对于那些职业喷子和脑残粉,小僧送你们两个字 ...

  10. WebApplication和WebSite的简单区别

    初步认识网站和网站应用程序区别 1. 网页头部文件 网站 <%@ Page Language="VB" AutoEventWireup="false" C ...