统计树上所有无序点对之间的距离和。 x , y 的距离定义为 x 到y 路径上所有边的边权和。
#include<bits/stdc++.h>
using namespace std;
int n,x,y;
int ans=0,cnt,nxt[100005],head[100005],to[100005],si[100005];
void add(int u,int v){
to[++cnt]=v;
nxt[cnt]=head[u];
head[u]=cnt;
}
void dfs(int x,int fa){
si[x]=1;
ans+=si[x]*(n-si[x]);
cout<<ans<<"T"<<endl;
for(int i=head[x];i;i=nxt[i])
if(to[i]!=fa){
dfs(to[i],x);
si[x]+=si[to[i]];
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<n;i++){
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
dfs(1,0);
cout<<ans;
return 0;
}```
样例:
```cpp
3
2 3
2 1
输出
4
我的代码输出6,求调