来源:JZOJ
题目描述
给定一棵 n n n 个节点的树,求其中每个点到其他节点的距离和。
解题思路
- 首先,如果是求第一个点到其他节点的距离和应该很简答吧
void dfs(int x,int father){
sum[x]=1; //以x为根的子树中点的个数
ans+=deep[x]; //deep是点1到点x的深度
for (int i=linkk[x];i;i=e[i].Next) //邻接表查询
{
int y=e[i].y;
if (y!=father)
{
deep[y]=deep[x]+e[i].v; //深度增加
dfs(y,x); //继续遍历
sum[x]+=sum[y]; //累加个数
}
}
}
- 那么我们再来考虑每个点到其他节点的距离和
- 可以看出,对于一个点 y y y,他的父亲是 x x x,边权是 v v