#P995. 直径之和

直径之和

题目描述

GG 上有 nn 个点,依次从 11nn 编号,初始图上没有边,将有 n1n-1 次操作来添加长度均为 11 的边,保证图时刻是一个森林(每个连通块都分别构成树),每次加边后你需要计算森林中每棵树的直径长度之和。

直径长度定义为树中最远的两个点之间的距离,距离定义为最短路径上的边权和。一个点的树的直径长度是 00

为了保证你真的在即时处理询问,而不是把它们存下来之后慢慢处理,你需要维护一个初值为 00 的变量 varvar,每次加边给定 a,ba,b,你需要计算 u=axorvar,v=bxorvaru=a\operatorname{xor}var,v=b\operatorname{xor}var,并在 u,vu,v 之间加边,保证 1u,vn1\leq u,v\leq n,加边之后记当前每棵树的直径长度之和为 dd,令 var=dxorvarvar = d \operatorname{xor} var

你只需要输出最后的 varvar 的值。

输入格式

第一行两个整数 nn

接下来 n1n-1 行,每行两个整数 a,ba,b,含义见题目描述。

输出格式

输出一行一个整数,表示最后的 varvar 的值。

3 
1 2
3 2
3

样例解释 1

第一次加边后森林的直径之和是 0+1=1, 第二次实际加的边是 u=2,v=3, 加边后森林的直径之和是 2, 输出 1 xor 2 =3。

数据范围

对于 30%30\% 的数据,1n1001\leq n\leq 100

对于 60%60\% 的数据,1n30001\leq n\leq 3000

对于 100%100\% 的数据,1n1051\leq n\leq 10^50a,b2n0\leq a,b\leq 2n1u,vn1\leq u,v\leq n