题目描述

现在小朋友们最喜欢"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形:
 左上角点为(1,1),右下角点为(N,M)(上图中N=3,M=4).有以下三种类型的道路
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只狼,才能完全封锁这条道路,你需要帮助狼王安排一个伏击方案,使得在将兔子一网打尽的前提下,参与的狼的数量要最小。因为狼还要去找喜羊羊麻烦。
输入
第一行为N,M.表示网格的大小,N,M均小于等于1000。
接下来分三部分
第一部分共N行,每行M-1个数,表示横向道路的权值。
第二部分共N-1行,每行M个数,表示纵向道路的权值。
第三部分共N-1行,每行M-1个数,表示斜向道路的权值。
输出
输出一个整数,表示参与伏击的狼的最小数量。
样例输入
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
样例输出
14
题解
裸的最小割,我转了转最大流跑Dinic。
记得连双向边。发现当前弧优化很优秀……
 1 #include<cstdio>
 2 #include<cstring>
 3 #define F(i,a,b) for(int i=a;i<=b;++i)
 4 #define F2(i,a,b) for(int i=a;i<b;++i)
 5 #define v(a,b) ((a-1)*m+b)
 6 int n,m,S,T;
 7 int h[1000001],nxt[6000001],to[6000001],cap[6000001],tot=1;
 8 inline void ins(int x,int y,int c){nxt[++tot]=h[x];to[tot]=y;cap[tot]=c;h[x]=tot;nxt[++tot]=h[y];to[tot]=x;cap[tot]=c;h[y]=tot;}
 9 int iter[1000001],lv[1000001],que[1000001],l,r;
10 inline int Min(int p,int q){return p<q?p:q;}
11 void init(){
12     int x;
13     scanf("%d%d",&n,&m); S=1, T=v(n,m);
14     F(i,1,n) F2(j,1,m)
15         scanf("%d",&x), ins(v(i,j),v(i,j+1),x);
16     F2(i,1,n) F(j,1,m)
17         scanf("%d",&x), ins(v(i,j),v(i+1,j),x);
18     F2(i,1,n) F2(j,1,m)
19         scanf("%d",&x), ins(v(i,j),v(i+1,j+1),x);
20 }
21 bool lvl(){
22     memset(lv,0,sizeof lv);
23     lv[S]=1; que[1]=S; l=r=1;
24     int u;
25     while(l<=r){
26         u=que[l++];
27         for(int i=h[u];i;i=nxt[i])
28             if(cap[i]&&!lv[to[i]]) lv[to[i]]=lv[u]+1, que[++r]=to[i];
29     } if(!lv[T]) return 0;
30     F(i,S,T) iter[i]=h[i];
31     return 1;
32 }
33 int flow(int u,int f){
34     if(u==T) return f;
35     int d,sum=0;
36     for(int&i=iter[u];i;i=nxt[i]){
37         if(cap[i]&&lv[to[i]]>lv[u]){
38             d=flow(to[i],Min(cap[i],f));
39             sum+=d; f-=d;
40             cap[i]-=d; cap[i^1]+=d;
41             if(!f) return sum;
42         }
43     }
44     return sum;
45 }
46 int Dinic(){
47     int sum=0;
48     while(lvl())
49         sum+=flow(S,999999999);
50     return sum;
51 }
52 int main(){
53     init();
54     printf("%d",Dinic());
55     return 0;
56 }

转载于:https://www.cnblogs.com/PinkRabbit/p/7327131.html

【bzoj题解】1001 狼抓兔子相关推荐

  1. bzoj 1001狼抓兔子

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec   Memory Limit: 162 MB Submit: 15622   Solved: 3771 [ Sub ...

  2. BZOJ 1001: 狼抓兔子

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec   Memory Limit: 162 MB [ Submit][ Status] Description 现在小 ...

  3. BZOJ 1001 狼抓兔子

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 25653  Solved: 6512 [Submit ...

  4. BZOJ 1001 狼抓兔子(Dijkstra)

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

  5. BZOJ:1001狼抓兔子

    简直了非常迷 看到题目毫不犹豫的写了一个网络流,然后果真就TLE了 翻了一下题解,就是最大流最小割定理然后,然后将平面图变成对偶图,相当于是从起点到终点跑一个最短路就可以了 神马居然还有这种操作??! ...

  6. [BZOJ 1001] 狼抓兔子

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1001 分析 这是道经典的对偶图问题, 平面图最大流问题可以转化为其对偶图的最短路问题. 转化的 ...

  7. BZOJ 1001: [BeiJing2006]狼抓兔子【最大流/SPFA+最小割,多解】

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 23822  Solved: 6012 [Submit ...

  8. 【BZOJ1001】狼抓兔子题解

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

  9. 1001: [BeiJing2006]狼抓兔子(对偶图)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 23595  Solved: 5940 Descrip ...

最新文章

  1. 电脑温度检测软件哪个好_一般电脑录音软件哪个好?
  2. table列最小宽度 vue_vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)...
  3. pureftpd + pureftp-user-manager 构建磁盘配额,速率限制,web管理ftpserver
  4. 【sublime Text】sublime Text3安装可以使xml格式化的插件
  5. VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题
  6. 设计模式学习(一)——策略模式
  7. 片上网络NoC(一)—— 概述
  8. java 日期 区间_如何实现时间区间的分割??
  9. C++重载IO操作符
  10. Android :ScaleAnimation
  11. oracle客户端ora 12541,Oracle 11g 64bit下程序报ORA-12541: TNS: 无监听程序解决办法
  12. 02 . 在 Linux 上安装Oracle11g 数据库
  13. 【配送路径规划】基于matlab遗传算法求解单配送中心多客户多车辆最短路径规划问题【含Matlab源码 1602期】
  14. 开元酒店在中国的签约及在营酒店规模正式超过600家
  15. 微信公众服务号如何快速申请注册并认证开通支付功能
  16. html转word设置一二三级标题,word怎么设置一二三级标题
  17. php steamcommunity,使用PHP和Regex获取Steam社区市场上商品的价格
  18. “建木”萌芽,聚木成林
  19. 奇门遁甲排盘方:定局
  20. 数据结构算法 - 栈

热门文章

  1. Linux--文件结构体struct file
  2. 程序中调用命令行命令,不显示那个黑黑的DOS窗口
  3. 内存泄露检测工具比较
  4. 使用 C++ 处理 JSON 数据交换格式
  5. BASH中字符串的处理
  6. [react] react怎么提高列表渲染的性能?
  7. 前端学习(3125):react-hello-react之类式组件里的构造器域props
  8. [vue] 如何解决vue打包vendor过大的问题?
  9. [css] css的属性content有什么作用呢?有哪些场景可以用到?
  10. 工作316:uni-修改其他页面的时间逻辑