1001: [BeiJing2006]狼抓兔子

Time Limit: 15 Sec Memory Limit: 162 MB
Submit: 12719 Solved: 3017
[Submit][Status][Discuss]
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

看着论文学了一下平面图和对偶图《两极相通—浅析最大最小定理在信息学竞赛中的应用》
其实就是将这个平面图转化成一个对偶图,在这个对偶图上求最短路的长度,就是原来平面图的最小割。

#include<iostream>
#include<cstdio>
#include<cstring>
#define T n*(m-1)+(n-1)*m+(n-1)*(m-1)-n*m+3
using namespace std;
const int N=2001000;
int n,m,point[N],next[N*3],tot=1,ans,dis[N],l[10000000];
struct S{int st,en,va;
}aa[N*3];
bool f[N];
inline void add(int x,int y,int z)
{tot+=1,next[tot]=point[x];point[x]=tot;aa[tot].st=x;aa[tot].en=y;aa[tot].va=z;tot+=1,next[tot]=point[y];point[y]=tot;aa[tot].st=y;aa[tot].en=x;aa[tot].va=z;
}
inline int SPFA(int x,int y)
{int h=1,t=1,u,i;memset(dis,127/3,sizeof(dis));memset(f,1,sizeof(f));l[h]=x;dis[x]=0;while(h<=t){u=l[h];f[u]=true;for(i=point[u];i;i=next[i])if(dis[aa[i].en]>dis[u]+aa[i].va){dis[aa[i].en]=dis[u]+aa[i].va;if(f[aa[i].en]){f[aa[i].en]=false;t+=1;l[t]=aa[i].en;}}h+=1;}return dis[y];
}
int main()
{int i,j,x,y,z;scanf("%d%d",&n,&m);ans=210000000;for(i=1;i<=n;++i)for(j=1;j<m;++j){scanf("%d",&x);if(n==1) ans=min(ans,x);if(i==1) add(1,j*2+1,x);else if(i==n) add((i-2)*(m-1)*2+j*2,T,x);else add((i-2)*(m-1)*2+j*2,(i-1)*(m-1)*2+j*2+1,x);}for(i=1;i<n;++i)for(j=1;j<=m;++j){scanf("%d",&x);if(m==1) ans=min(ans,x);if(j==1) add((i-1)*(m-1)*2+2,T,x);else if(j==m) add(1,i*(m-1)*2+1,x);else add((i-1)*(m-1)*2+(j-1)*2+1,(i-1)*(m-1)*2+j*2,x);}for(i=1;i<n;++i)for(j=1;j<m;++j){scanf("%d",&x);add((i-1)*(m-1)*2+j*2,(i-1)*(m-1)*2+j*2+1,x);}if(n==1&&m==1) ans=0;if(n==1||m==1) printf("%d\n",ans);else printf("%d\n",SPFA(1,T));
}

【bzoj1001】【狼抓兔子】相关推荐

  1. BZOJ1001 狼抓兔子 终于过了!

    时间来不及了,先贴代码吧!有时间再写. 好苦逼啊,WA了若干次,还有一次RE,一次TLE. 虽然主要运用的算法和资料都由师兄提供了.还是太弱了,太天真了. 首先,数据范围就WA了,RE了,TLE了. ...

  2. [bzoj1001]狼抓兔子

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

  3. bzoj1001狼抓兔子

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

  4. 【BJOI2006】bzoj1001 狼抓兔子

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

  5. BZOJ1001 狼抓兔子

    最小割 代码 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) m ...

  6. 【BZOJ1001】狼抓兔子

    [BZOJ1001]狼抓兔子 题面 bzoj 题解 懒得平面图转对偶图了,直接最小割板子加优化. #include <iostream> #include <cstdio> # ...

  7. 【BZOJ1001】狼抓兔子题解

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

  8. bzoj1001/BJOI2006 狼抓兔子

    1001: [BeiJing2006]狼抓兔子(传送门) 图论新知识..没学过.. 平面图最小割等于对偶图的最短路 详见课件:http://wenku.baidu.com/view/8f1fde586 ...

  9. 狼抓兔子(平面图转对偶图)

    狼抓兔子(平面图转对偶图) 面对下面这样一个网格的地形: 道路上的权值表示这条路上最多能够通过的兔子数,道路是无向的. 左上角和右下角为兔子的两个窝,开始时所有的兔子都聚集在左上角(1,1)的窝里,现 ...

最新文章

  1. Java 文件和byte数组转换
  2. DM8168 新三板系统启动
  3. CString 类型和引用
  4. 排序算法(一)--桶排序、冒泡、快排(JAVA)
  5. 学习OpenVINO笔记之Inference Engine Device Query API
  6. mysql配置文件改密码_mysql8.0 安装教程(自定义配置文件,密码方式已修改)
  7. tab+easyui datagrid无法正常显示
  8. word2vec的应用场景
  9. 连接mysql的各种方式
  10. 页面布局_【三十七集】页面布局中的视觉流
  11. spring框架包含的模块
  12. android 高德amap开发二(地图操作)
  13. 支付宝App支付源码
  14. c语言的get函数的用法,get函数的用法
  15. python3的下载和安装
  16. Android StepsView 步骤控件
  17. 前端跨域问题—解决Firefox浏览器显示“已阻止载入混合活动内容”的方法
  18. AUTOCAD教程——粘贴为块
  19. 二十四、红孩儿亲爹的考证
  20. 【一】c语言程序设计-介绍篇

热门文章

  1. ae导出gif插件_AE脚本:快速输出GIF动图格式插件脚本 Aescaripts GifGun 1.7 Win/Mac
  2. maya刷权重时有个叉_Maya权重如何刷取
  3. AltiumDesigner绘制PCB(二)
  4. 计算机科学省级期刊,计算机时代杂志
  5. Foursquare解密创新商机
  6. mysql 一边查询一边删除和一边新增一边查询判断所导致的问题
  7. 阿里P8 谈微服务的应用架构设计
  8. USB3.0和2.0有什么区别 --旧时光 oldtimeblog
  9. 最简单的命令开启cgi文件服务器
  10. 基于ADAU1761-ADC与DSP的接口链路设计