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 ...
随机推荐
- ios NSHashTable & NSMapTable
在ios开发中大家用到更多的集合类可能是像NSSet或者NSDictionary,NSArray这样的.这里要介绍的是更少人使用的两个类,一个是NSMapTable,另一个是NSHashTable. ...
- ios-异步消息同步问题-典型使用场景: 微信私信界面
前言 在ios开发中常常会有聊天功能,一般简单聊天功能只传输文字,但是稍微复杂点儿会有图片发送功能了.最全而且可支持扩展的例如微信,qq 聊天功能了.传输方式各有千秋,如get,post,websoc ...
- Oracle 11g gateways(透明网关)配置
配置要点主要有三点: 1.%GATEWAYS_HOME%(透明网关安装目录)\dg4msql\admin\initdg4msql.ora 内容: HS_FDS_CONNECT_INFO=localho ...
- 数组做为参数传入Oracle存储过程操作数据库
p { margin-bottom: 0.25cm; direction: ltr; color: rgb(0, 0, 0); line-height: 120%; text-align: justi ...
- xcode插件安装完之后无法使用问题解决
1.打开xcode插件所在的目录: 例如: ~/wangdi/library/Application Support/Developer/Shared/Xcode/Plug-ins /Users/su ...
- js使用正则表达式去空格
写成类的方法格式如下:(str.trim();) <script language="javascript"> String.prototype.trim=functi ...
- 工具系列之Sublime Text 3 使用总结
1.Sublime Text 2/3如何支持中文GBK编码(解决中文乱码) Sublime Text默认是只支持UTF8的编码,所以有些时候,当我们打开GBK文件时候,文件内会出先部分的乱码,如下图 ...
- Cookies和Sseeion的选择
Cookies和Session都是用来记录个人信息 来保持页面状态 现在介绍些Cookies 的优点 1 把存储数据的压力分担到了客户端 ,这样服务器就少点压力 2 可以用来记录用户状态(如放入用户 ...
- erlang 里的if 和 case
case Expression of Pattern1 [when Guard1] -> Expr_seq1; Pattern2 [when Guard2] -> Expr_seq2; … ...
- centOS 6.4 mysql安装
1 直接安装 yum install mysql mysql-server 2 启动mysql /usr/bin/mysqld_safe --user=mysql & 启动时,如果出现Can' ...