BZOJ 2143 飞飞侠(分层最短路)】的更多相关文章

飞飞国是一个N×M的矩形方阵,每个格子代表一个街区.然而飞飞国是没有交通工具的.飞飞侠完全靠地面的弹射装置来移动.每个街区都装有弹射装置.使用弹射装置是需要支付一定费用的.而且每个弹射装置都有自己的弹射能力.我们设第i行第j列的弹射装置有Aij的费用和Bij的弹射能力.并规定有相邻边的格子间距离是1.那么,任何飞飞侠都只需要在(i,j)支付Aij的费用就可以任意选择弹到距离不超过Bij的位置了.现在的问题很简单.有三个飞飞侠,分别叫做X,Y,Z.现在它们决定聚在一起玩,于是想往其中一人的位置集合…
#include<cstdio> #include<iostream> #include<queue> #define inf 1000000000 #define M 155 using namespace std; ]={,,-,,},yy[]={,,,,-}; *M],d[M][M][*M]; char ch; int ans=inf; struct data { int x,y,w,w1; }; bool operator>(data a,data b)…
题目: Description 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠.飞飞国是一个N×M的矩形方阵,每个格子代表一个街区.然而飞飞国是没有交通工具的.飞飞侠完全靠地面的弹射装置来移动.每个街区都装有弹射装置.使用弹射装置是需要支付一定费用的.而且每个弹射装置都有自己的弹射能力.我们设第i行第j列的弹射装置有Aij的费用和Bij的弹射能力.并规定有相邻边的格子间距离是1.那么,任何飞飞侠都只需要在(i,j)支付Aij的费用就可以任意选择弹到距离不超过Bij的位置了.如下图 (从红色街区交…
传送门 最短路好题. 考虑对每个二维坐标建立一个高度属性. 这样每次如果在点(i,j,0)(i,j,0)(i,j,0)只能选择花费bi,jb_{i,j}bi,j​跳向(i,j,ai,j)(i,j,a_{i,j})(i,j,ai,j​),然后如果当前状态的高度不是000就可以花费000的代价选择让高度下降一个,同时向周围四格走一步或者原地不动. 然后跑三次最短路就可以了. 代码: #include<bits/stdc++.h> using namespace std; typedef long…
2143: 飞飞侠 题意: 给出两个 n ∗ m 的矩阵 A,B,以及 3 个人的坐标 在 (i, j) 支付 Ai,j 的费用可以弹射到曼哈顿距离不超过 Bi,j 的位置 问三个人汇合所需要的最小总费用 其中 0 < n,m < 150,0 < A < 1000,0 < B < 10^9. 分层图最短路也好,用dijkstra/spfa做dp也罢,反正就是辣么一回事! 把距离等效成油量之类的东西,单独拿出一维 \(f_{i,j,k}\)表示从起点到(i,j),剩下k个…
Description 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠.飞飞国是一个N×M的矩形方阵,每个格子代表一个街区.然而飞飞国是没有交通工具的.飞飞侠完全靠地面的弹射装置来移动.每个街区都装有弹射装置.使用弹射装置是需要支付一定费用的.而且每个弹射装置都有自己的弹射能力.我们设第i行第j列的弹射装置有Aij的费用和Bij的弹射能力.并规定有相邻边的格子间距离是1.那么,任何飞飞侠都只需要在(i,j)支付Aij的费用就可以任意选择弹到距离不超过Bij的位置了.如下图  (从红色街区交费以后…
https://nanti.jisuanke.com/t/31001 题意 可以把k条边的权值变为0,求s到t的最短路 解析  分层最短路  我们建立k+1层图 层与层之间边权为0,i 向 i+1层转移,代表用了一条免费边. #include <bits/stdc++.h> #define pb push_back #define mp make_pair #define fi first #define se second #define all(a) (a).begin(), (a).en…
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2763 解题心得: 第一次见到分层最短路.其实题中说选择k条路径免费,那怎么选k条路径并没有一个明确的选法,就只能遍历.分层图就是一个图分成k层,每个节点可以走当前层的相邻节点,费用为cost,但是也可以走下一层的相邻节点,费用为0,因为只有k层,所以从第0层的S到达第k层的T也就走了k个免费路径.这个时候K不能太大,不然容易MLE. #include <stdio.h> #inclu…
Time Limit: 50 Sec Memory Limit: 259 MB Description 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠.飞飞国是一个N×M的矩形方阵,每个格子代表一个街区.然而飞飞国是没有交通工具的.飞飞侠完全靠地面的弹射装置来移动.每个街区都装有弹射装置.使用弹射装置是需要支付一定费用的.而且每个弹射装置都有自己的弹射能力.我们设第i行第j列的弹射装置有Aij的费用和Bij的弹 射能力.并规定有相邻边的格子间距离是\(1\).那么,任何飞飞侠都只需要在(i,j)…
BZOJ 2143 新技能:并查集优化最短路. 暴力最短路是$O(n^4)$的,然后拿个线段树优化一下连边就$O($能过$)$了. 但是这样都太慢了. 我们考虑一个点如果之前被更新过了,那么之后就不会被更新了,所以我们只要能跳过这个已经被更新过的点,直接去更新没有更新过的点就行了,刚好对应了一个并查集的路径压缩,这样子每一次跳到一个没有更新过的点就是$O(1)$的了. 每一个点拿出来的更新的时候其实是要付出它的点权,所以我们要把$dis_{x, y}  + a_{x, y}$一起丢到堆里去才能保…