01 2020 档案
摘要:"Link" Solution 最小生成树有两个性质: 在任意最小生成树上,任意权值的边数目是相同的; 任意最小生成树,在加完了小于某权值的边之后,图的联通性是一样的。 所以先跑一遍Kruskal,对每条边处理出加入权值比他小的边之后两端点所在的联通块。 对于每组询问用,把边按边权排序之后,并查集c
阅读全文
摘要:Prufer序列 Prufer 序列可以将一个带标号n个结点的无根树用n-2个[1,n]的整数表示。也可以理解为完全图的生成树与数列之间的双射。 带标号无根树与Prufer序列是一一对应的。 无根树转Prufer序列 有一棵带标号无根树。它的Prufer序列构造如下: 每次选择一
阅读全文
摘要:"Link" Solution 真是惭愧,现在才来做这道noip就应该做的题目。可能不落实题目也是我csp惨败的原因吧。 把一个玩家的跑步路径拆成两段,以后的统计也分开:一段是从s到lca的上升路径,一段是从lca到t的下降路径。 考虑上升路径。对于路径上的某个点i,要在i处
阅读全文
摘要:"Link" Solution 考虑用LCT维护颜色。每一个splay维护的是两两不同的颜色。 第一个操作可以实际上就是access操作。 第二个操作问路径上的颜色种类数。第三个问子树内颜色种类的max。 因为是静态树,不能再把路径split出来了。考虑差分回答:$ans=cnt
阅读全文
摘要:"Link" Solution 首先不能看错题。题目里有句话: 子节点的标号为上一个 0 号操作叶子标号加 1 。 它是站在 全局0号操作 的角度的,比如上一次在[l_0,r_0]长了一个编号为i的节点,这一次0操作是在[l,r],那么长出的节点应该是i+1。这样意味着某个编号的节点
阅读全文
摘要:"Link" Solution LCT维护边双的裸题。每次的答案是路径上边双数量 1。 维护边双可以用并查集维护,每次操作就直接作用在边双的代表元素上就行了。因为怕自己漏掉一些find(),导致没有在代表元素上操作,干脆就~~丧心病狂~~地在进入任意函数的时候都find()一遍(反正复杂度也
阅读全文
摘要:"Link" Solution 求两端点的子树大小然后相乘。 可以想到直接断边然后两边都makeroot一下。答案就是根节点的size。 但是怎么维护size呢?实子树大小可以直接由两个实儿子得到。但是虚子树不行。所以可以对每个点多维护一个sv[],表示这个节点的虚子树大小总和。 那
阅读全文
摘要:"Link" Solution 感觉自己做完全靠蒙和猜,尽管是正解但并不知道为什么。看了题解才知道原来是生成树满足这个性质。 暴力可以枚举max\{a\},然后在此条件下找max\{b\}最小的1到n的路径。 优化可以参照kruskal的思想。 先把所有边按a_i从小到大排序。维
阅读全文