NOI 2018 归程 (Kruskal重构树)】的更多相关文章

题目大意:太长了,略 Kruskal重构树,很神奇的一个算法吧 如果两个并查集被某种条件合并,那么这个条件作为一个新的节点连接两个并查集 那么在接下来的提问中,如果某个点合法,它的所有子节点也都合法,即子节点的限制少于父节点 #include <cstdio> #include <algorithm> #include <cstring> #include <queue> #define inf 0x3f3f3f3f #define ll long long…
NOI Day1T1归程(Kruskal重构树+Dijkstra) 题目 洛谷题目传送门 题解 其实我不想写......,所以...... 挖个坑......我以后一定会补的 luogu的题解讲的还是很详细的...... 恩,感谢cwen详细教我做这道题,让我2遍A 然后我丑陋的代码(代码太长,所以压得很丑) #include<iostream> #include<cstdlib> #include<cstdio> #include<cmath> #incl…
题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 n 个节点.m 条边的无向连通图(节点的编号从 1 至 n).我们依次用 l,a 描述一条边的长度.海拔. 作为季风气候的代表城市,魔力之都时常有雨水相伴,因此道路积水总是不可避免 的.由于整个城市的排水系统连通,因此有积水的边一定是海拔相对最低的一些边.我们用水位线来描述降雨的程度,它的意义是:所有海拔不超过水位线的边都是有积水的. Yazid 是一名来自魔力之都的OIer,刚参加完ION2018…
[NOI2018]归程 LG传送门 kruskal重构树模板题. 另一篇文章里有关于kruskal重构树更详细的介绍和更板子的题目. 题意懒得说了,这题的关键在于快速找出从查询的点出发能到达的点(即经过海拔高于水位线的边能到达的点)中距离\(1\)号点最近的距离. 看上去可以kruskal,假设我们把边实现按海拔从大到小排序,考虑我们的重构树的性质:一个小根堆,任意一个点到根节点的路径上的点权单调不升,且这条路径上最浅的高于水位线的点\(u\)的子树中的所有叶节点就是这个点所能到达的所有点.di…
洛谷题目链接:[NOI2018]归程 因为题面复制过来有点炸格式,所以要看题目就点一下链接吧\(qwq\) 题意: 在一张无向图上,每一条边都有一个长度和海拔高度,小\(Y\)的家在\(1\)节点,并且他有一部车,车只能在海拔高度大于降水量的道路上行驶,如果某一条边的海拔高度小于等于降水量,那么小\(Y\)就必须下车步行,现在有\(q\)次询问,每次询问从目标点到\(1\)要步行的最短距离.强制在线. 题解: 这题我采用的做法是kruskal重构树. 可能大家对kruskal重构树并不是很熟悉,…
题意 直接看题目吧,不好描述 Sol 考虑暴力做法 首先预处理出从$1$到每个节点的最短路, 对于每次询问,暴力的从这个点BFS,从能走到的点里面取$min$ 考虑如何优化,这里要用到Kruskal重构树 我们按边权的海拔从大到小排序,建出Kruskal重构树 这一定是一个小根堆 那么一个点的子树内的节点一定可以相互到达且经过的最小的海拔为该点权值 那么每次查询的时候,我们只需要倍增的处理出从这个点向上走多少才不能满足条件 然后在子树内查每个点到$1$的最大值即可. 哎,调了一上午也没调出来,只…
LOJ2718 BZOJ5415 洛谷P4768 Rank3+Rank1无压力 BZOJ最初还不是一道权限题... Update 2019.1.5 UOJ上被hack了....好像是纯一条链的数据过不了,不管了....现在不想改. 容易想到按高度Kruskal重构树+预处理到点1的距离dis. 建一棵最大生成树,如果随便建的话,如果非树边能走,整棵树都能走答案当然是0...:如果有些树边不能走,那么可走范围被限制在了某个连通块. 然而被限制在某个连通块和图(还要暴力,难道树分块?)没什么区别,所…
链接 https://loj.ac/problem/2718 思路 我们希望x所在的连通块尽量的大,而且尽量走高处 离线的话可以询问排序,kruskal过程中更新答案 在线就要用kruskal重构树 这kruskal重构树的话,看图就明白了 叶子节点都是原树节点 非叶子节点都是边 按照从大到小的顺序依次加边(是深度不是长度) 如果连通块已经在一起就不联通,其他两个最大节点和这个边(新建节点)连边 看图就是很明白 我们发现,重构树的根到任意节点是单调的,也就是说,这是个二叉堆啊 那两点间联通的最小…
关于Kruskal重构树可以翻阅本人的最小生成树笔记. 这题明显裸的Kruskal重构树. 然后这题限制$\le p$的边不能走,实际上就是要满足走最小边权最大的瓶颈路,于是跑最大生成树,构建Kruskal重构树. 通过倍增跳到最浅祖先位置,就get到了一个点可以走到的点集(子树所有叶子).这些点里选出一个距离$1$最短的.dijkstra.子树维护$\min_{dis}$即可. 复杂度$O(T(M\log M+Q\log N))$ 注意Kruskal重构树的算法并不是特别容易写对.配合上多测,…
解题思路 \(NOI2018\)的\(Day1\) \(T1\),当时打网络赛的时候不会做.学了一下\(kruskal\)重构树后发现问题迎刃而解了.根据\(kruskal\)的性质,如果要找从\(u\)出发,所走边权\(>lim\)的所能到达的点,可以将边从大到小排序,重构树后从\(u\)往上跳到点权\(>lim\)深度最浅的点,这个点子树的叶节点为所求点集合.有了这个以后就可以跑一遍从\(1\)开始的最短路,记\(Min(i)\)表示重构树上\(i\)这个节点所有子树到\(1\)的最小值.…