首先通过dfs求出每个节点的时间戳,即第一次访问该节点的时间,将时间戳按照从小到大的顺序进行排序,并用ans累计相邻两节点的路径长度,可以发现所求的答案为ans/2 运用set记录当前出现的异象石,当询问和删除时,就很容易找到它左边的和右边的异象石 设d[i]为从i到跟节点的距离,用差分的思想,从i到j的路径的长度dis(i,j)=di+dj-2*d lca(i,j) 当插入节点x时,找到x左边和右边的节点l,r(注意边界的情况)ans减去dis(l,r)再加上dis(l,x)+dis(x,r) 删除时思路也一样只是先加再减 对于询问输出ans/2 代码 #include<bi...