【题解】狼抓兔子—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;
}
【题解】狼抓兔子—BZOJ1001。的更多相关文章
- 狼抓兔子 BZOJ- 1001 最小割
https://www.lydsy.com/JudgeOnline/problem.php?id=1001 一个图,问你花费多少才能把到终点的所有边堵住... 就是求一个最小割,把$(1,1)$和$( ...
- [bzoj1001][BeiJing2006]狼抓兔子_网络流_最小割转对偶图
狼抓兔子 bzoj-1001 BeiJing2006 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还 ...
- 【bzoj1001】【最短路】【对偶图】【最大流转最小割】狼抓兔子题解
[BZOJ1001]狼抓兔子 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 18872 Solved ...
- 【BZOJ1001】狼抓兔子(网络流)
[BZOJ1001]狼抓兔子(网络流) 题面 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨, ...
- 【BZOJ1001】[BeiJing2006]狼抓兔子 对偶图最短路
[BZOJ1001][BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子 ...
- 【BZOJ1001】狼抓兔子(平面图转对偶图,最短路)
[BZOJ1001]狼抓兔子(平面图转对偶图,最短路) 题面 BZOJ 洛谷 题解 这题用最小割可以直接做 今天再学习了一下平面图转对偶图的做法 大致的思路如下: 1.将源点到汇点中再补一条不与任何线 ...
- [BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 31805 Solved: 8494[Submit][ ...
- 【BZOJ1001】狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 7530 Solved: 1724[Submit][S ...
- bzoj1001狼抓兔子 对偶图优化
bzoj1001狼抓兔子 对偶图优化 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路 菜鸡总是要填坑的! 很明显让你求网格图的最 ...
随机推荐
- centos6+ 安装python3.6以及pip3
https://blog.csdn.net/weixin_42350212/article/details/83008248
- AI和机器学习对云应用的安全产生了何种影响?
AI和机器学习对云应用的安全产生了何种影响? 正如其他许多新兴技术一样,AI是一把双刃剑,它对于云计算的安全影响是双重的:这项技术可以使工作负载变得更加安全,但也可能会为新的威胁打开大门. 出现这种分 ...
- P1090 合并果子 题解
那么,我们开始吧, 堆 堆是一个完全二叉树,而且是每层都有规律的二叉树 规律大概是: 小根堆:最上层数的大小最小,往下每层结点都比父亲结点大,比两个儿子结点小 大根堆:最上层数的大小最大,往下每层结点 ...
- 毕业设计5:基于MicroPython的智能火灾报警器系统的设计与实现
随着现代家庭用火.用电量的增加,家庭火灾发生的频率越来越高.家里一旦发生火灾,如果出现扑救不及时.灭火器材缺乏.以及在场人惊慌失措.逃生迟缓等不利情况下,最终就会导致产生重大的生命财产的损失. 消防部 ...
- Git-删除文件后找回-比较文件差异
#前提:删除前,文件存在是的状态提交到了本地库#操作: git reset --hard 指针位置 删除操作已近提交到本地库:指针指向历史记录 linxianli@VM-QS- MINGW64 /c/ ...
- Ubuntu下找不到ttyUSB*问题解决
一.硬件连接 确认Ubuntu对USB转串口设备的支持. 1.# lsmod | grep usbserial如果有usbserial,说明系统支持USB转串口. 如果没有,先安装ch340驱动或者c ...
- 安装maven,并配置eclipse
平台 ubuntu 18.04 + Java 8 下载并安装Maven 下载页面:http://maven.apache.org/download.cgi 我这里使用写博客是最新的版本3.6.1,选择 ...
- IntelliJ IDEA 2018 最新版注册码
参考:IntelliJ IDEA 2018注册码(无需修改hosts文件) :
- springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetomany
springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetoma ...
- P2522 [HAOI2011]Problem b (莫比乌斯反演)
题目 P2522 [HAOI2011]Problem b 解析: 具体推导过程同P3455 [POI2007]ZAP-Queries 不同的是,这个题求的是\(\sum_{i=a}^b\sum_{j= ...