zoukankan      html  css  js  c++  java
  • 6444. 【GDOI2020模拟01.18】树高

    题目

    正解

    这题也不是给人写出来的……
    先不要考虑操作二。
    有一种比较新奇的思路:将点的颜色挂在边上,然后搞出个边的连通块。
    这些连通块的维护是很舒服的,直接上数据结构即可。
    考虑边的连通块和点的连通块的关系。
    假如有(x)(y)(z)三个点相连,(x)(y)父亲,(y)(z)父亲。
    ((x,y))((y,z))的颜色相同,意味着(y)(z)的颜色相同。
    推广一下,我们可以发现,对于一个边连通块而言,除了根节点(需要特判是不是整棵树的根节点),其它的点的颜色都相同。
    既然这个性质这么优美,操作一和操作三就可以轻松解决了。

    接下来考虑操作二。
    发现这题似乎没有必要用LCT,因为LCT注重维护链上的东西,而这题不需要。这题也没有必要换根。所以用ETT更加简洁一些。
    考虑将一个连通块变色之后的影响。最主要的是,我们要判断变色之后,有哪些原来跟它相连的连通块可以和它合并。
    假如我们能够暴力地将这些连通块一个个找出来,然后连在一起。势能分析得到,连接的次数是(O(n))级别的。
    为了找到这些连通块,就要能够精准打击,每次找都会有结果。ETT的splay上对于一棵子树维护信息:对于每种颜色,是否有别的连通块连向区间内的点的边是这个颜色。同时,也对每棵点记录连向它的每种颜色的边分别有哪些。
    乱搞即可……

    总结

    还是没代码啊……
    将点权变成边权,这个套路很新颖,似乎在许多地方可以用得上。

  • 相关阅读:
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    2013551822第一次作业
    第八次作业
    第七次作业
    第六次作业
    第五次作业
    第四次作业
  • 原文地址:https://www.cnblogs.com/jz-597/p/12238845.html
Copyright © 2011-2022 走看看