<sdoi2017>树点涂色

题解:

首先,按照原树,构建出一个全部都是虚边的LCTLCT ,并用树剖维护每个点到根节点的路径权值valval。可以发现,每个点到根节点的路径权值就是每个点到根节点的路径上实链的个数。

我们发现,操作11 实际上就是LCTLCT 中AccessAccess 的操作。在AccessAccess 的操作中,如果一条实边变成虚边,那么将连接这条边的深度较大的节点的子树里所有点的valval 加 11 (因为实链数量就等于虚边数量+1+1 ),如果一条虚边变成实边,那么将连接这条边的深度较大的节点的子树里所有点的valval 减11 。

这样,询问22 其实就是求val[x]+val[y]-val[lca(x,y)]*2+1val[x]+val[y]val[lca(x,y)]2+1 的值,询问33 就是求xx 的子树最大值。在以上,由于同一个子树里的节点DFSDFS 序是一段连续的区间,所以对于子树的修改询问,直接提取对应的DFSDFS 序区间即可。

代码:

posted @ 2018-02-21 10:50  尹吴潇  阅读(118)  评论(0编辑  收藏  举报