p5471 [NOI2019]弹跳】的更多相关文章

原题传送门 先考虑部分分做法: subtask1: 暴力\(O(nm)\)枚举,跑最短路 subtask2: 吧一行的点压到vector中并排序,二分查找每一个弹跳装置珂以到达的城市,跑最短路 subtask3: 看见是一个链,自然而然的可以想到线段树优化建图,跑最短路 100pts 上面是72pts的暴力做法,其中subtask3的做法给了我们了一些提示,这题要用数据结构优化建图: 在横轴上开一颗线段树,线段树每个节点上是一个存pair的set,存的是\([l,r]\)区间内有第\(id\)个…
题面传送门 一道非常有意思的题(大概可以这么形容?) 首先看到这类一个点想一个区域内连边的题目可以很自然地想到线段树优化建图,只不过这道题是二维的,因此需要使用二维线段树优化建图,具体来说,我们外层开一棵大线段树维护 \(x\) 轴下标区间,大线段树上每个节点又套了个小的动态开点线段树,每次我们从一个点向一个矩形连边时就在动态开点线段树上找到对应的区间并从这个点向这些区间中连边,不难发现这个做法点数是 \(\mathcal O(n\log^2n)\) 级别的,边数是 \(\mathcal O(m…
luogu 因为是一个点向矩形区域连边,所以可以二维数据结构优化连边,但是会MLE.关于维护矩形的数据结构还有\(KD-Tree\),所以考虑\(KDT\)优化连边,空间复杂度\(m\sqrt n\),无法通过 进一步的,一条题目中的边会对若干\(KDT\)上的点连边,然后这些点的子树被此点更新.考虑\(dijkstra\)的过程,每次拿出\(dis\)最小的点,并更新其他点,并且可以发现如果其他点被当前最小的\(dis_x+w_i\)更新到就不能再被更新了,那么我们可以每次取出最小的\(dis…
分析 代码 #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define mp make_pair ; const int M = 2e5; int n,m,w,h,x[N],y[N],p[M],t[M],L[M],R[M],D[M],U[M]; int head[N],nxt[M],cnt,dis[N],vis[N]; multiset&…
题意: 给你平面上的$n$个点,共有$m$个弹跳装置. 每个弹跳装置可以从点$p_{i}$以$t_{i}$的代价跳到矩形$(L_{i},D_{i}),(R_{i},U_{i})$中的任何一个点. 现在请你对于每座城市求出从1号点跳到它的最小代价. $n\leq 70000,m\leq 150000$. 题解:不把边建出来的$KD-tree$优化建图. 看一眼就知道$KD-tree$优化建图,但如果把所有边都建出来就爆炸了. 设原图上的点是实点,$KD-tree$上的点(代表一个实点和一个矩形)是…
本题可以用的方法很多,除去以下三种我所知道的就还有至少三种. 方法一:类似线段树优化建图,将一个平面等分成四份(若只有一行或一列则等分成两份),然后跑Dijkstra即可.建树是$O(n\log n)$的,单次连边是$O(n\log^2 n)$的. #include<queue> #include<vector> #include<cstdio> #include<cstring> #include<algorithm> #define rep(…
题目链接 第一眼就是 $KDtree$ 优化建图然而,空间只有 $128mb$,开不下   时间不吃紧,考虑直接跑 $Dijkstra$ $Dijkstra$ 中存储的是起点到每个输入时给出的矩阵的最短距离 当取出堆顶时就将这个矩阵中所有点 "裂开",并更新每一个小点的答案 如果该点在之前已经被一个最短路更短的矩阵更新过了,就不扩展它 否则,扩展每一个分裂出的点,将新的矩阵加入优先队列中即可 一个重要的优化就是每次 "分裂" 一个矩阵时要在 $KDtree$ 中将对…
被jump送退役了,很生气. 不过切了这题也进不了队,行吧. 退役后写了一下,看到二维平面应该就是KD树,然后可以在KD树上做最短路,然后建立堆和KDTree.然后每次更新则是直接把最短路上的节点删掉,然后合并KDTree #include<bits/stdc++.h> using namespace std; ,M=15e5+; struct point{int w,l,r,u,d;}p[N]; struct node{int u,d;}; vector<int>G[N]; ];…
题目传送门 题目大意 给出 \(n\) 做城市,每座城市都有横纵坐标 \(x,y\).现在给出 \(m\) 个限制 \(p,t,l,r,d,u\),表示从 \(p\) 城市出发,可以花费 \(t\) 走到 \(l\le x\le r,d\le y\le u\) 的一座城市. 问,从城市 1 出发走到每座城市的最小花费是多少? \(n\le 7\times 10^4,m\le 1.5\times 10^5\) 思路 这道题自己只做出来 \(76\) 分,剩下的感觉还是比较妙吧? 首先不难看出,我们…
Description 平面上有 \(n\) 个点,分布在 \(w \times h\) 的网格上.有 \(m\) 个弹跳装置,由一个六元组描述.第 \(i\) 个装置有参数:\((p_i, t_i, L_i, R_i, D_i, U_i)\),表示它属于 \(p_i\) 号点,从点 \(p_i\) 可以通过这个装置跳到任意一个满足 \(x\) 坐标 \(\in[L_i, R_i]\),\(y\) 坐标 \(\in [D_i, U_i]\) 的点,耗时 \(t_i\). 现给出点 \(i\sim…