AC,最慢的跑了 333ms。
时间复杂度不应该是 O(Tn) 吗?
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int T;
int n;
int u,v;
vector<int>G[N];
int dep[N]; //代表的节点的深度
int siz[N]; //代表节点的子树大小和
void dfs(int u,int fa){ //目前dfs到了节点u,它的父节点是节点fa
siz[u]=1; //子树大小是1
dep[u]=dep[fa]+1; //深度是父节点深度+1
for(int i=0;i<G[u].size();i++){
int v=G[u][i]; //与之相连的节点
if(v==fa){ //如果是父节点
continue;
}
dfs(v,u); //去dfs节点v,它的父节点是节点u
siz[u]+=siz[v];
}
}
int main(){
cin.tie(0)->sync_with_stdio(0);
cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=n;i++){
G[i].clear();
}
for(int i=1;i<n;i++){
cin>>u>>v;
G[u].push_back(v);
G[v].push_back(u);
}
dfs(1,-1);
for(int i=1;i<=n;i++){
cout<<dep[i]<<" "<<n-siz[i]+1<<"\n";
}
}
return 0;
}