求调
  • 板块题目总版
  • 楼主wudaojiushu
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/2/24 09:06
  • 上次更新2024/2/24 11:40:32
查看原帖
求调
725268
wudaojiushu楼主2024/2/24 09:06

统计树上所有无序点对之间的距离和。 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,求调

2024/2/24 09:06
加载中...