树分治,设当前树的分治中心为x,其子树分治中心为y,则设father[y]=x,分治下去则可以得到一颗重心树,而且树的深度是logn. 询问操作(x,d),只需要查询重心树上x到重心树根节点上的节点的累加和.假设当前节点是y,那么节点y可以贡献的答案是那些以y为分治中心且到y距离为d-dis(x,y)的节点的总和.当然这样可能会出现重复的情况,重复情况只会出现在包含x的那颗子树上,因此减掉即可.修改操作类似.复杂度O(nlognlogn) 代码 #include<cstdio> #includ…