Luogu P4768 [NOI2018]归程】的更多相关文章

P4768 [NOI2018]归程 题面 题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 \(n\) 个节点. \(m\) 条边的无向连通图(节点的编号从 \(1\) 至 \(n\) ).我们依次用 \(l,a\) 描述一条边的长度.海拔. 作为季风气候的代表城市,魔力之都时常有雨水相伴,因此道路积水总是不可避免 的.由于整个城市的排水系统连通,因此有积水的边一定是海拔相对最低的一些边.我们用水位线来描述降雨的程度,它的意义是:所有海拔不超过水位…
题目链接 \(Click\) \(Here\) \(Kruskal\)重构树的好题.想到的话就很好写,想不到乱搞的难度反而相当高. 按照点的水位,建出来满足小根队性质的\(Kruskal\)重构树,这样一个点的子树里的点就是所有可以开车到达的点.做一遍最短路预处理,然后树上求一个子树\(min\),就可以得到子树里面的点到点\(1\)的最短距离.注意需要初始化. #include <bits/stdc++.h> using namespace std; const int N = 800010…
洛谷P4768 [NOI2018]归程 LOJ#2718.「NOI2018」归程 用到 kruskal 重构树,所以先说这是个啥 显然,这和 kruskal 算法有关系 (废话 这个重构树是一个有点权的树 以最小生成树为例,当然最大也一样 先把所有原有的节点点权赋为 \(0\) 在跑 kruskal 的时候,我们没求出一条当前权值最小,且两端点不在同一集合的边时(并查集,kruskal 常规操作),我们就选这条边,然后把两端点划分在同一集合 不过上面仅仅时 kruskal 的操作,另外,我们还要…
洛谷题目链接:[NOI2018]归程 因为题面复制过来有点炸格式,所以要看题目就点一下链接吧\(qwq\) 题意: 在一张无向图上,每一条边都有一个长度和海拔高度,小\(Y\)的家在\(1\)节点,并且他有一部车,车只能在海拔高度大于降水量的道路上行驶,如果某一条边的海拔高度小于等于降水量,那么小\(Y\)就必须下车步行,现在有\(q\)次询问,每次询问从目标点到\(1\)要步行的最短距离.强制在线. 题解: 这题我采用的做法是kruskal重构树. 可能大家对kruskal重构树并不是很熟悉,…
题目传送门 归程 格式难调,题面就不放了. 分析: 之前同步赛的时候反正就一脸懵逼,然后场场暴力大战,现在呢,还是不会$Kruskal$重构树,于是就拿可持久化并查集做. 但是之前做可持久化并查集的时候感觉掌握的并不熟,还是需要参照别人的题解,不过至少现在对可持久化的理解更深了一步,而且终于这题给调对了. Code: //It is made by HolseLee on 23rd Aug 2018 //Luogu.org 4768 #include<cstdio> #include<c…
\(\color{#0066ff}{题目描述}\) 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 n 个节点.m 条边的无向连通图(节点的编号从 1 至 n).我们依次用 l,a 描述一条边的长度.海拔. 作为季风气候的代表城市,魔力之都时常有雨水相伴,因此道路积水总是不可避免 的.由于整个城市的排水系统连通,因此有积水的边一定是海拔相对最低的一些边.我们用水位线来描述降雨的程度,它的意义是:所有海拔不超过水位线的边都是有积水的. Yazid 是一名来自…
题意 直接看题目吧,不好描述 Sol 考虑暴力做法 首先预处理出从$1$到每个节点的最短路, 对于每次询问,暴力的从这个点BFS,从能走到的点里面取$min$ 考虑如何优化,这里要用到Kruskal重构树 我们按边权的海拔从大到小排序,建出Kruskal重构树 这一定是一个小根堆 那么一个点的子树内的节点一定可以相互到达且经过的最小的海拔为该点权值 那么每次查询的时候,我们只需要倍增的处理出从这个点向上走多少才不能满足条件 然后在子树内查每个点到$1$的最大值即可. 哎,调了一上午也没调出来,只…
闲话 一个蒟蒻,在网络同步赛上进行了这样的表演-- T2组合计数不会,T3字符串数据结构不会,于是爆肝T1 一开始以为整个地图都有车,然后写了2h+的树套树,终于发现样例过不去 然后写可持久化并查集Debug到13:20过了前4个样例,然后第5个T飞了. FST? ...... FST! 完美收获50分暴力分. 原来是按秩合并那里咕咕了. 从50到100的蜕变,只需一行,你值的拥有. 思路 不会kruscal重构树 容易发现,假设我们确定了水位线,那么就确定了图中有哪些边是连通的.这时候的答案该…
洛谷 361行代码的由来 数据分治大发好啊- NOI的签到题,可怜我在家打了一下午才搞了80分. 正解应该是kruskal重构树或排序+可持久化并查集. 我就分点来讲暴力80分做法吧(毕竟正解我也没太懂)- 前6个点 这6个点有两种做法: 法1:最短路. 这6个点都是离线的,而且只有一种海拔,所以直接最短路. 跑完之后,直接判断海拔与水位,输出即可. 不过这些分也并不好拿,spfa会被卡,要用堆优化dijkstra. 法2:离线排序+并查集. 其实这个暴力思想就是正解思想了,很好想到的. 首先跑…
并不会写Kruskal重构树,两个$log$跑得比较卡. 首先考虑一下没有强制在线的要求怎么办,有一个比较容易想到的做法就是先跑一遍最短路,然后把所有边按照海拔从大到小排序,把所有询问的海拔也从大到小排序,然后对于每一个询问$(x, h)$把所有海拔高于$h$的边都连上,然后看一看点$x$的能到达的点中离$1$距离最小的点是多少. 这就是一个并查集可以维护的东西了. 强制在线怎么办……直接大力把这个并查集可持久化……就没了. 时间复杂度$O(nlog^2n)$. Code: #include <…