BZOJ_1001_狼抓兔子_(平面图求最小割+对偶图求最短路)
描述
http://www.lydsy.com/JudgeOnline/problem.php?id=1001
1001: [BeiJing2006]狼抓兔子
Time Limit: 15 Sec Memory Limit: 162 MB
Submit: 17068 Solved: 4171
[Submit][Status][Discuss]
Description

Input
Output
输出一个整数,表示参与伏击的狼的最小数量.
Sample Input
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
HINT
2015.4.16新加数据一组,可能会卡掉从前可以过的程序。
Source
分析
平面图求最小割,转化成对偶图求最短路,经典.
注意:
1.优先队列是个大根堆.
2.Dijkstra可以带一个vis数组,也可以不带,因为一个点出来以后,它更新的的点和原本就在队列里的点都比它大,所以它不可能被更新得更小,之后这个点再出队时情况不比第一次更优,所以出队也不会有操作.
3.双向边,数组要开够(貌似不是第一次犯这个错误).
4.网上有人说m==1||n==1的情况可以不特判,在get函数中已经可以处理妥当,大丈夫.
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std; const int maxn=+,oo=<<;
int n,m,cnt;
int d[maxn*maxn*],head[maxn*maxn*];
bool vis[maxn*maxn*];
struct edge{
int to,w,next;
edge(){}
edge(int a,int b,int c):to(a),w(b),next(c){}
bool operator<(const edge &a) const { return a.w<w; }
}g[maxn*maxn*];
void insert(int from,int to,int w){
g[++cnt]=edge(to,w,head[from]); head[from]=cnt;
g[++cnt]=edge(from,w,head[to]); head[to]=cnt;
} int get(int x,int y,int z){
if(x<||y>=m) return ((n-)*(m-)<<)+;
if(x>=n||y<) return ;
return (((x-)*(m-)+y-)<<)+z+;
}
int Dijkstra(int s,int t){
for(int i=;i<=((n-)*(m-)<<)+;i++) d[i]=oo;
d[s]=;
priority_queue <edge> q;
q.push(edge(s,,));
while(!q.empty()){
edge e=q.top(); q.pop();
int x=e.to;
if(vis[x]) continue;
vis[x]=true;
for(int i=head[x];i;i=g[i].next){
int y=g[i].to;
if(d[y]>d[x]+g[i].w){
d[y]=d[x]+g[i].w;
q.push(edge(y,d[y],));
}
}
}
return d[t];
} void init(){
for(int i=;i<=n;i++){
for(int j=;j<m;j++){
int a; scanf("%d",&a);
insert(get(i,j,),get(i-,j,),a);
}
}
for(int i=;i<n;i++){
for(int j=;j<=m;j++){
int a; scanf("%d",&a);
insert(get(i,j-,),get(i,j,),a);
}
}
for(int i=;i<n;i++){
for(int j=;j<m;j++){
int a; scanf("%d",&a);
insert(get(i,j,),get(i,j,),a);
}
}
} int main(){
scanf("%d%d",&n,&m);
init();
printf("%d\n",Dijkstra(,((n-)*(m-)<<)+));
return ;
}
BZOJ_1001_狼抓兔子_(平面图求最小割+对偶图求最短路)的更多相关文章
- BZOJ1001: [BeiJing2006]狼抓兔子(优化的dinic或转化对偶图求最短路)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 30078 Solved: 7908[Submit][ ...
- 【BZOJ1001】狼抓兔子(平面图转对偶图,最短路)
[BZOJ1001]狼抓兔子(平面图转对偶图,最短路) 题面 BZOJ 洛谷 题解 这题用最小割可以直接做 今天再学习了一下平面图转对偶图的做法 大致的思路如下: 1.将源点到汇点中再补一条不与任何线 ...
- [bzoj1001][BeiJing2006]狼抓兔子_网络流_最小割转对偶图
狼抓兔子 bzoj-1001 BeiJing2006 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还 ...
- 【Bzoj】1001狼抓兔子(平面图最小割转对偶图最短路)
YEAH 题目链接 终于做对这道题啦 建图的艰辛难以言表- - 顺便说一句我队列转STL啦 狼抓兔子的地图符合平面图定义,于是将该图转成对偶图并求出对偶图的最短路即可. 这篇博客给了我极大的帮助 ...
- BZOJ_2001_[BeiJing2006]狼抓兔子_最小割转对偶图
BZOJ_2001_[BeiJing2006]狼抓兔子 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 分析:思路同NOI2010海拔. ...
- [BeiJing2006]狼抓兔子 dijkstra+平面图最小割
一眼裸的最大流求最小割,然而数据范围过大,跑不下来. 我们可以将平面图转成对偶图,并进行连边. 这样,每条边的长度就对应原图中的割边长度. 起点到终点的最短路即为最小割. 别用SPFA,会死的很惨 C ...
- BZOJ 1001 [BeiJing2006] 狼抓兔子(平面图最大流)
题目大意 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的.而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- _bzoj1001 [BeiJing2006]狼抓兔子【平面图】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 顺便推荐一个ppt,里面有对平面图的介绍:浅析最大最小定理在信息学竞赛中的应用. 这里 ...
- 【BZOJ1001】狼抓兔子(平面图最小割转最短路)
题意:有一张平面图,求它的最小割.N,M.表示网格的大小,N,M均小于等于1000. 左上角点为(1,1),右下角点为(N,M).有以下三种类型的道路 1:(x,y)<==>(x+1,y ...
随机推荐
- linux中转换编码
iconv -f gb2312 -t utf-8 文件 -o 输出文件名 iconv -f gb2312 -t utf-8 文件 #直接在终端中显示 enca -L zh_CN file #查看 ...
- Android应用不随手机屏幕旋转的方法
在主配置文件里面.在需要设置的activity项后面加上 android:screenOrientation="portrait",这个activity就保持竖屏显示了:在每个ac ...
- Visual C++ 打印编程技术-编程基础-映射模式
映射模式: Visual C++ 中采用的坐标映射方式使得用户图形坐标和输出设别的像素完全一致. eg:当屏幕的像素大小为800X600时,每英寸包含屏幕像素为96,打印机则需要几倍的点数才能达到同样 ...
- html-----007
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 关于web项目中中文乱码问题的总结
关于post和get的中文乱码处理 get: (1)转码:String username=request.getParameter("username"); Strin ...
- 窗口 namedWindow(), destroyWindow(), destroyAllWindows()[OpenCV 笔记6]
void namedWindow(const string& winname, int flags=WINDOW_AUTOSIZE); 创建一个窗口.imshow直接指定窗口名,可以省去此函数 ...
- ZEngine游戏框架需求稿
早在2013就开始接触cocos2dx游戏框架,觉得的使用框架对于游戏开发者来说有些不方便.我便想在cocos2dx的框架基础之上实现ZEngine库,方便开发者编辑动画,以及着重于对游戏逻辑的处理. ...
- vim plugin 原理
vim 个性化设置与功能扩展均通过 script 来实现,这种 script 又叫 plugin.plugin 是 vim 的核心与精髓. 最常用的配置文件 vimrc,也是一种 plugin.换句话 ...
- 使用SqlBulkCopy批量插入多条数据进入表中
由于工作中项目需求结算一次生成一批相同批次号的数据插入一个表中,然后再通过另一页面展示出来,所以需要用到一次性插入一批数据,所以就采用了SqlBulkCopy插入一批数据 1 public stati ...
- 【搭建开发环境】在 Windows XP 中参与开源项目,搭建 git 和 cygwin 开发环境
引言 只有一台 Windows XP 家用机,却想在诸如 Git@OSC 之类的开源社区参与开发,本文提供一个入门级的开发环境搭建指引. 涉及工具:Eclipse,EGit,Cygwin. 欢迎来到 ...