【题解】[BeiJing2008]狼抓兔子—BZOJ1001。
(胡扯时间)今天炒鸡无聊就打算BZOJ开始从第一道题开始顺着打,这样未来一段时间内也就有事干了。结果发现A+B切掉后就遭遇了一个"小小"的瓶颈(真不友好。
好了说题说题。看题第一眼我下意识想打个最短路直接跑过,结果发现没有给兔子总共有多少(那就肯定最短不了了。
然后内心***之后发现还不是平面图,那我赶紧先认真起来好好打(恶)个(补)对偶图吧。
此时我又想到了qy巨佬教育我们的"脑补一下这个题,是不是很简单。"
脑补越强,对偶图越简单。
正解time:
显而易见这是一道赤果果的网络流,那就转化为对偶图然后直接跑个堆优化Dij吧。
在我MLE两遍T了一次以后发现还是得用spfa(qwq。
个人感觉最难的其实还是在平面图->对偶图的时候需要脑补每个面的编号进行加边。
我当时一直不太理解两个面连边是穿过的曾经的那个边就为现在这个边的权值应该如何实现。
后来发现完全可以直接建对偶图而不是平面图->对偶图。(orz。
我的加边代码可能和你们的不太一样(编号问题,所以推荐自己脑补一下自己的代码。
死于快读。!!!!!!!
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cctype>
#include<queue>
#define rg register
using namespace std;
//inline int read(){
// rg int s=0,f=0;
// rg char ch=getchar();
// while(!isdigit(ch)) f|=(ch=='-'),ch=getchar();
// while(isdigit(ch)) s=(s<<1)+(s<<3)+(ch^48),ch=getchar();
// return f?-s:s;
//}
int n,m,s,t,cnt;
const int MAX=6000015;
struct edge{int nxt;int to;int val;
}e[MAX];
int dis[MAX],head[MAX];
bool vis[MAX];
queue<int>q;
inline void add(int u,int v,int w){e[++cnt].nxt=head[u];e[cnt].to=v;e[cnt].val=w;head[u]=cnt;
}
int spfa(){memset(dis,0x3f,sizeof(dis));dis[s]=0;q.push(s); while(!q.empty()){int u=q.front();q.pop();vis[u]=0;for(rg int i=head[u];i;i=e[i].nxt){if(dis[e[i].to]>dis[u]+e[i].val){dis[e[i].to]=dis[u]+e[i].val;if(!vis[e[i].to]){vis[e[i].to]=1;q.push(e[i].to);}}}}return dis[t];
}
int main(){
// n=read(),m=read();scanf("%d %d",&n,&m);s=0,t=(n-1)*(m-1)*2+1;for(rg int i=1;i<=m-1;++i){
// int w=read();int w;scanf("%d",&w);add(i*2,t,w);add(t,i*2,w);}for(rg int i=2;i<=n-1;++i){for(rg int j=1;j<=m-1;++j){
// int w=read();int w;scanf("%d",&w);add((i-1)*(m-1)*2+j*2,(i-1)*(m-1)*2+j*2-m*2+1,w);add((i-1)*(m-1)*2+j*2-m*2+1,(i-1)*(m-1)*2+j*2,w);}}for(rg int i=1;i<=m-1;++i){
// int w=read();int w;scanf("%d",&w);add((n-2)*2*(m-1)+i*2-1,s,w);add(s,(n-2)*2*(m-1)+i*2-1,w);}for(rg int i=1;i<=n-1;++i){
// int w=read();int w;scanf("%d",&w);add((i-1)*(m-1)*2+1,s,w);add(s,(i-1)*(m-1)*2+1,w);for(rg int j=1;j<=m-2;++j){
// w=read();scanf("%d",&w);add((i-1)*(m-1)*2+j*2+1,(i-1)*(m-1)*2+j*2,w);add((i-1)*(m-1)*2+j*2,(i-1)*(m-1)*2+j*2+1,w);}
// w=read();scanf("%d",&w);add((i-1)*(m-1)*2+(m-2)*2+2,t,w);add(t,(i-1)*(m-1)*2+(m-2)*2+2,w);}for(rg int i=1;i<=n-1;++i){for(rg int j=1;j<=m-1;++j){
// int w=read();int w;scanf("%d",&w);add((i-1)*(m-1)*2+j*2-1,(i-1)*(m-1)*2+j*2,w);add((i-1)*(m-1)*2+j*2,(i-1)*(m-1)*2+j*2-1,w);}}int ans=spfa();printf("%d",ans);return 0;
}
转载于:https://www.cnblogs.com/Sinyess/p/10603869.html
【题解】[BeiJing2008]狼抓兔子—BZOJ1001。相关推荐
- 【BZOJ1001】狼抓兔子题解
BZOJ1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还 ...
- 【BZOJ1001】狼抓兔子
[BZOJ1001]狼抓兔子 题面 bzoj 题解 懒得平面图转对偶图了,直接最小割板子加优化. #include <iostream> #include <cstdio> # ...
- BZOJ1001 狼抓兔子 终于过了!
时间来不及了,先贴代码吧!有时间再写. 好苦逼啊,WA了若干次,还有一次RE,一次TLE. 虽然主要运用的算法和资料都由师兄提供了.还是太弱了,太天真了. 首先,数据范围就WA了,RE了,TLE了. ...
- 【bzoj1001】【狼抓兔子】
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 12719 Solved: 3017 [Submit][ ...
- bzoj1001/BJOI2006 狼抓兔子
1001: [BeiJing2006]狼抓兔子(传送门) 图论新知识..没学过.. 平面图最小割等于对偶图的最短路 详见课件:http://wenku.baidu.com/view/8f1fde586 ...
- [bzoj1001]狼抓兔子
现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点 ...
- bzoj 1001狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 15622 Solved: 3771 [ Sub ...
- 狼抓兔子(平面图转对偶图)
狼抓兔子(平面图转对偶图) 面对下面这样一个网格的地形: 道路上的权值表示这条路上最多能够通过的兔子数,道路是无向的. 左上角和右下角为兔子的两个窝,开始时所有的兔子都聚集在左上角(1,1)的窝里,现 ...
- BZOJ 1001: [BeiJing2006]狼抓兔子【最大流/SPFA+最小割,多解】
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 23822 Solved: 6012 [Submit ...
最新文章
- php 接收多图片base64
- iphone mac地址是否随机_iOS8随机MAC地址功能:需要满足前提要求
- crazy pony_My Little Pony的11个DevOps课程
- OCR性能优化:从神经网络到橡皮泥
- first-class type 一等类型的含义
- iOS限制文本输入长度进阶之 一
- Java基础篇:如何应用接口?
- K3 官改新手小白配置阿里DDNS 超级详细
- 编程语言和开发环境的选择
- ios html背景音乐,iOS音频篇:使用AVPlayer播放网络音乐
- 2015计算机考试成绩查询网址,2015年下半年软考成绩查询入口!
- 缺钱的时候怎么办:让死钱变活钱的六大妙招
- 查看、修改oracle字符集,查看oracle版本
- (一)固体密度的测量
- SSM毕设项目校园书蜀黍易购平台xk9g6(java+VUE+Mybatis+Maven+Mysql)
- c语言177转换成八进制,C语言项目设计——进制转换
- 新型激光辨识算法助力机器人逃离死胡同
- 农历php,农历日历 php下实现农历日历的代码
- string与cstring区别
- 阿里巴巴YunOS在CES上展示IoT生态
热门文章
- 单片机蓝桥杯准备:温度模块
- java阶乘和的算法_java_4种阶乘算法
- windows虚拟机_[安装实录]如何在 Vmware虚拟机中安装 macOS Mojave -- Windows 版
- 【论文】TagSLAM: Robust SLAM with Fiducial Markers
- java response 返回_JavaWeb response对象常用操作
- 初中级前端面试题—完整版
- 【华人学者风采】董绍俊 中国科学院长春应用化学研究所
- drwtsn32.log 占用空间很大!
- Django+vue搭建一个前后端分离的web 一
- 2017 世界增强现实亚洲博览会将盛大开幕!