题解 P3831 [SHOI2012]回家的路】的更多相关文章

什么叫分层图最短路,我不会/kk 感觉自己做法和其他题解不大一样所以过来发篇题解了. 未刻意卡常拿下最优解 题目大意 就是说给你一个 \(n \times n\) 的网格图和 \(m\) 个可换乘点,然后你只能在同一行或同一列(如果在行上移动,就不能在列上移动:反之同理)上移动,除非这个点是可以换乘的.每次走一格花费 \(2\) 费,换乘花费 \(1\) 费,求从 \((sx,sy)\) 到 \((fx,fy)\) 的最小费用. 其中:\(n \leqslant 20000,m \leqslan…
P3831 [SHOI2012]回家的路 分层图基础题,就是建图稍有麻烦   #include<cstdio> #include<algorithm> #include<iostream> #include<cmath> #include<map> #include<iomanip> #include<cstring> #define reg register #define EN std::puts("&quo…
题目背景 SHOI2012 D2T1 题目描述 2046 年 OI 城的城市轨道交通建设终于全部竣工,由于前期规划周密,建成后的轨道交通网络由2n2n条地铁线路构成,组成了一个nn纵nn横的交通网.如下图所示,这2n2n条线路每条线路都包含nn个车站,而每个车站都在一组纵横线路的交汇处. 出于建设成本的考虑,并非每个车站都能够进行站内换乘,能够进行站内换乘的地铁站共有mm个,在下图中,标上方块标记的车站为换乘车站.已知地铁运行 1 站需要 2 分钟,而站内换乘需要步行 1 分钟.Serenade…
---题面--- 题解: 吐槽:找了好久的错,换了n种方法,重构一次代码,,,, 最后发现,,, 数组开小了,其实一开始尝试开大了数组,但唯独没有尝试开大手写队列的数组.... 思路: 有两种方法,这里都介绍一下吧,分别在时间复杂度和代码复杂度上各有优势. 第一种:时间复杂度更优,代码复杂 观察到转弯时需要多消耗1的费用,不转弯则不用.因此我们记录一个last表示这个点的最短路是从哪走来的.(其实就是记录路径) 然后注意到A ---> C 与A ---> B ---> C是等效的,因此我…
分层图最短路[bzoj2834]: 回家的路 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2834 这道题难在建边. 自己写的时候想到了两边排序这些细节,但是思路出错在跑最短路的时候. 前几天做的水壶也是难在建边.一想那个题我就开始敲广搜,可是要比自己想的难.之后冷静了一下想到了排序建边.建完边之后就可以开始跑最短路了. 这道题确实加深了我对分层图最短路的理解. 因为当时自己敲的时候还是设了两维的状态,第二维我设的是方向,因为只会横…
2834: 回家的路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 62  Solved: 38[Submit][Status][Discuss] Description Input Output Sample Input 2 1 1 2 1 1 2 2 Sample Output 5 HINT N<=20000,M<=100000 Source dijkstra+堆优化+分层图 把所有的横向和纵向分开看.跑最短路即可. 注意:N这么大,不能写…
题目 F.A.Qs Home Discuss ProblemSet Status Ranklist Contest 入门OJ ModifyUser  DCOI Logout 捐赠本站 Notice:1:注册本OJ方式请见https://www.lydsy.com/JudgeOnline/wttl/thread.php?tid=5671 2:替用户ir1d发布如下信息,希望大家能够积极支持. OI Wiki 致力于成为一个开放自由的 OI 知识整合站点,欢迎感兴趣的同学参与贡献 https://o…
题目背景 SHOI2012 D2T1 题目描述 \(2046\) 年 \(OI\) 城的城市轨道交通建设终于全部竣工,由于前期规划周密,建成后的轨道交通网络由\(2n\)条地铁线路构成,组成了一个\(n\)纵\(n\)横的交通网.如下图所示,这\(2n\)条线路每条线路都包含\(n\)个车站,而每个车站都在一组纵横线路的交汇处. 出于建设成本的考虑,并非每个车站都能够进行站内换乘,能够进行站内换乘的地铁站共有\(m\)个,在下图中,标上方块标记的车站为换乘车站.已知地铁运行 \(1\) 站需要…
题目描述 输入 输出 样例输入 2 1 1 2 1 1 2 2 样例输出 5 题解 分层图最短路 dis[i][0]表示到i为横向时起点到i的最短路,dis[i][1]表示到i为纵向时起点到i的最短路. 然后把同行列相邻的节点连边建图,跑一下就行了. 然而题目中可能出现起点或终点与换乘站重复的情况,所以必须横竖两种情况全强行判断,不能以为横着的就不是竖着的,否则会无限WA. #include <cstdio> #include <cstring> #include <util…
题目链接 对于相邻的.处在同在一行或一列的车站连边,然后用dis[x][0/1](或者拆点)分别表示之前是从横边还是竖边到x的,跑最短路. 我选择拆点.. //13028kb 604ms #include <queue> #include <cstdio> #include <cctype> #include <cstring> #include <algorithm> //#define gc() getchar() #define MAXIN…