这题考了两遍 QAQAQAQ
第一遍还是我懵懂无知的时候,不知道换根怎么搞,就打的跟染色那题似的用LCT直接维护。
第二遍临近noi一个月的现在,LCT+dfs序线段树就可以了,但是手残打跪了。
题目抽象为这个模型
有一棵n个节点的树,每个节点有一个颜色,初始每个节点颜色不相同,且以节点1为根。定义每个点的权值为这个点到根的路径上不同颜色的个数。现在进行m次操作,每次操作为下列三种之一:
1、将x到当前根路径上的所有点染成一种新的颜色;
2、将x到当前根路径上的所有点染成一种新的颜色,并且把这个点设为新的根;
3、查询以x为根的子树中所有点权值的平均值。
好吧也不算抽象,其实这是另一个题目描述囧
第一步转换:任意一个点到根的路径上,相同的颜色必然是连续的一段,于是重新定义颜色数目为一个点到根的路径上虚边个数+1
于是操作一就是 Access 过程咯,就是在 Access 过程中进行虚实边切换的时候,假设一个节点 v 要接为
这一步用 LCT 和 df