【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)…
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的位置了.如下图  (从红色街区交费以后…
题目: Description 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠.飞飞国是一个N×M的矩形方阵,每个格子代表一个街区.然而飞飞国是没有交通工具的.飞飞侠完全靠地面的弹射装置来移动.每个街区都装有弹射装置.使用弹射装置是需要支付一定费用的.而且每个弹射装置都有自己的弹射能力.我们设第i行第j列的弹射装置有Aij的费用和Bij的弹射能力.并规定有相邻边的格子间距离是1.那么,任何飞飞侠都只需要在(i,j)支付Aij的费用就可以任意选择弹到距离不超过Bij的位置了.如下图 (从红色街区交…
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}$一起丢到堆里去才能保…
http://www.lydsy.com/JudgeOnline/problem.php?id=2143 分层图最短路 把能够弹跳的曼哈顿距离看做能量 dp[i][j][k]表示在(i,j)位置,还有能量k的最少花费 弹跳的曼哈顿距离增加1,能量减1 当能量减为0时,花费费用充满能量 #include<queue> #include<cstdio> #include<iostream> #define N 151 typedef long long LL; const…
题目戳这里 有问题可以在博客@ 应该还会有人来看吧,嘻嘻 正题: 题目大意: 题目很清楚,就是一个点有一定的范围,会有一定的花费 求三个点中的任意两个点到另一个点的最小花费 (麻麻教育我千万读好题目(>_<)~) 思路 很容易想到跑最短路,但是建边的话,根本存不下来 所以我们直接存点的坐标,然后直接遍历范围内每个点就好了(遍历是看图找规律吧,反正我动脑子看不出来) 跑一边最短路就好了 bzoj完全没问题,这里指luogu spfa?他好像又死了(o2水过) 堆优化迪杰斯特拉是个好东西 我是先写…
Link: BZOJ 1800 传送门 Solution: $O(n^4)$…… Code: #include <bits/stdc++.h> using namespace std; ],tot=,res=; int main() { scanf("%d",&n); ;i<=n;i++) { int x;scanf("%d",&x); pre[i]=pre[i-]+x;tot+=x; } ;a<=n-;a++) ;b<…