比赛 2025.12.13 评测结果 AAAAAAAAEEEEEEEEEEEE
题目名称 树的重心 最终得分 40
用户昵称 梦那边的美好TE 运行时间 5.661 s
代码语言 C++ 内存使用 3.60 MiB
提交时间 2025-12-13 12:25:10
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=2005;
int T,n,ans,u[N],v[N],now,siz[N],mx[N];
vector<int>G[N];
void add(int x,int y){
	G[x].push_back(y);
}
void dfs1(int x,int fa){
	siz[x]=1;
	for(auto y:G[x]){
		if(y==fa)continue;
		dfs1(y,x);
		siz[x]+=siz[y];
	}
	return;
}
void dfs2(int x,int fa,int rt){
	for(auto y:G[x]){
		if(y==fa)continue;
		dfs2(y,x,rt);
		mx[x]=max(mx[x],siz[y]);
	}
	mx[x]=max(mx[x],siz[rt]-siz[x]);
	now=min(now,mx[x]);
	return;
}
void dfs3(int x,int fa){
	if(mx[x]==now)ans+=x;
	for(auto y:G[x]){
		if(y==fa)continue;
		dfs3(y,x);
	}
	return;
}
void calc(int rt){
	now=1e9;
	dfs1(rt,0);
	dfs2(rt,0,rt);
	dfs3(rt,0);
	return;
}
void clear(){
	for(int i=1;i<=n;i++)G[i].clear(),siz[i]=0,mx[i]=0;
	return;
}
void work(){
	scanf("%d",&n);
	for(int i=1;i<n;i++)scanf("%d %d",u+i,v+i);
	for(int i=1;i<n;i++){
		for(int j=1;j<i;j++){
			add(u[j],v[j]);
			add(v[j],u[j]);
		}
		for(int j=i+1;j<n;j++){
			add(u[j],v[j]);
			add(v[j],u[j]);
		}
		calc(u[i]);
		calc(v[i]);
		clear();
	}
	printf("%d\n",ans);
	ans=0;
	return;
}
int main(){
	freopen("centroid.in","r",stdin);
	freopen("centroid.out","w",stdout); 
	scanf("%d",&T);
	while(T--)work();
	return 0;
}