题目传送门 归程 格式难调,题面就不放了. 分析: 之前同步赛的时候反正就一脸懵逼,然后场场暴力大战,现在呢,还是不会$Kruskal$重构树,于是就拿可持久化并查集做. 但是之前做可持久化并查集的时候感觉掌握的并不熟,还是需要参照别人的题解,不过至少现在对可持久化的理解更深了一步,而且终于这题给调对了. Code: //It is made by HolseLee on 23rd Aug 2018 //Luogu.org 4768 #include<cstdio> #include<c…
闲话 一个蒟蒻,在网络同步赛上进行了这样的表演-- 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:离线排序+并查集. 其实这个暴力思想就是正解思想了,很好想到的. 首先跑…
题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个n 个节点.m 条边的无向连通图(节点的编号从 1至 n).我们依次用 l,a描述一条边的长度.海拔. 作为季风气候的代表城市,魔力之都时常有雨水相伴,因此道路积水总是不可避免 的.由于整个城市的排水系统连通,因此有积水的边一定是海拔相对最低的一些边.我们用水位线来描述降雨的程度,它的意义是:所有海拔不超过水位线的边都是有积水的. Yazid 是一名来自魔力之都的OIer,刚参加完ION2018 的他…
Description Input Output Sample Input1 14 31 2 50 12 3 100 23 4 50 15 0 23 02 14 13 13 2 Sample Output1 05020050150 Sample Input2 15 51 2 1 22 3 1 24 3 1 25 3 1 21 5 2 14 1 35 15 22 04 0 Sample Output2 0 2 3 1 HINT Solution 会了可持久化并查集这题可能会被卡的正解就很好写了………
解法一: 1.首先想到离线做法:将边和询问从大到小排序,并查集维护连通块以及每个连通块中所有点到1号点的最短距离.$O(n\log n)$ 配合暴力等可以拿到75分. 2.很容易想到在线做法,使用可持久化并查集,询问时二分即可. 不能使用路径压缩,应该按秩合并,注意秩是树的深度而不是大小.$O((E+Q)\log^2 N)$ 由于常数过大,基本过不去. 3.考虑优化算法二,发现访问历史版本并不需要修改而只需要询问,所以一开始只使用普通的并查集,用可持久化数组记录并查集的修改情况. $O((N+E…
洛谷题目链接:[NOI2018]归程 因为题面复制过来有点炸格式,所以要看题目就点一下链接吧\(qwq\) 题意: 在一张无向图上,每一条边都有一个长度和海拔高度,小\(Y\)的家在\(1\)节点,并且他有一部车,车只能在海拔高度大于降水量的道路上行驶,如果某一条边的海拔高度小于等于降水量,那么小\(Y\)就必须下车步行,现在有\(q\)次询问,每次询问从目标点到\(1\)要步行的最短距离.强制在线. 题解: 这题我采用的做法是kruskal重构树. 可能大家对kruskal重构树并不是很熟悉,…
题意 直接看题目吧,不好描述 Sol 考虑暴力做法 首先预处理出从$1$到每个节点的最短路, 对于每次询问,暴力的从这个点BFS,从能走到的点里面取$min$ 考虑如何优化,这里要用到Kruskal重构树 我们按边权的海拔从大到小排序,建出Kruskal重构树 这一定是一个小根堆 那么一个点的子树内的节点一定可以相互到达且经过的最小的海拔为该点权值 那么每次查询的时候,我们只需要倍增的处理出从这个点向上走多少才不能满足条件 然后在子树内查每个点到$1$的最大值即可. 哎,调了一上午也没调出来,只…
传送门 前置技能,克鲁斯卡尔重构树 我们按道路的高度建一个最大生成树,然后建好克鲁斯卡尔重构树 那么我们需要知道一颗子树内到1点距离最近是多少(除此之外到子树内任何一个点都不需要代价) 可以一开始直接跑一个dijkstra(关于SPFA,他死了) 然后一遍树形dp就可以了 //minamoto #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #include&…
正解:$kruscal$重构树 解题报告: 传送门$QwQ$ 语文不好选手没有人权$TT$连题目都看不懂真的要哭了$kk$ 所以先放个题目大意?就说给定一个$n$个点,$m$条边的图,每条边有长度和海拔.有$Q$组询问,每次查询从$x$出发,经过海拔超过$p$的所有路径,能到达的节点中距离1号节点的最短路径长是多少$QwQ$ 首先看到这个对海拔的限制就显然考虑$kruscal$重构树呗$QwQ$,然后说是所有海拔超过$p$的路径能到达的点中最短路最小的点$QwQ$? 可以理解成把最短路作为一个点…