题意:给一棵树,每次查询以点v为根节点的子树的重心。
题解:这里用到的性质是:重心在当前节点到他重儿子为根的子树,重心之间的路径上。
我是这样想,若一个根节点有n棵子树,那么其重心肯定在size最大的那一棵子树上,所以重心就在这棵子树的重心与当前根之间的路径上。
那我们只要从这个重心开始向上搜,那么第一个满足条件的就是重心。
条件为:size[u] - size[重心] *2<=size[u]) ,即以这个点为根,那么所有的子树(不算整个树自身)的大小都不超过整个树大小的一半。
代码:传送门