LGOJ4299 首都
这题是 \(LCT\) 维护子树信息中的 \(LCT\) 维护重心 Description link 题意概述:给定一个森林,要求支持以下操作 1.链接两个点 2.求一个点所在树的重心 3.求所有重心编号的异或和 Solution \[Begin\] 看到有链接和询问操作的题目,我们想到了 \(LCT\) 首先是一些重心的性质,本题可以用到: \(1.\) 点到树上所有点的距离和最小的那个点就是中心 \(2.\) 重心在添加一条边之后只会移动最多一条边的距离 \(3.\) 如果我们联通森林里的两棵树,那么新树的重心就在原两树重心的路径上 应该都由重心的定义理解啥的易证吧 \(2333\) 然后我们在处理 \(2\) 操作的时候搞个并查集( \(findroot\) 好像很慢) 处理 \(3\) 操作的时候直接在链上进行类似二分查找的东西,看两侧子树的大小关系 \[Q.A.D\] \(P.s.\) 博主知道应该是 \(QED\) Code #include <bits/stdc++.h> using namespace std; #define int long long namespace yspm { inline int read() { int res = 0, f = 1; char k; while (!isdigit(k = getchar())) if (k == '