1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 #define MAXN 20010 7 using namespace std; 8 typedef struct{ 9 int to,next; 10 }Node; 11 typedef struct PP{ 12 int id,par; 13 bool operator < (const PP &a) const { 14 if(par == a.par) return id < a.id; 15 return par < a.par; 16 } 17 }Partition; 18 Node edge[MAXN*2]; 19 Partition P[MAXN]; 20 int head[MAXN],vis[MAXN],cnt[MAXN],N; 21 void addedge(int u,int v,int k){ 22 edge[k].to = v; 23 edge[k].next = head[u]; 24 head[u] = k; 25 } 26 int dfs(int s){ 27 vis[s] = cnt[s] = 1; 28 for(int i = head[s];~i;i = edge[i].next){ 29 int u = edge[i].to; 30 if(!vis[u]) cnt[s] += dfs(u); 31 } 32 return cnt[s]--; 33 } 34 void dfs_partition(int s){ 35 vis[s] = 1; 36 P[s].id =s; 37 P[s].par = N - cnt[s] - 1; 38 for(int i = head[s];~i;i = edge[i].next){ 39 int u = edge[i].to; 40 if(!vis[u]){ 41 P[s].par = max(P[s].par,cnt[u]+1); 42 dfs_partition(u); 43 } 44 } 45 } 46 int main(){ 47 int t,u,v; 48 // freopen("in.c","r",stdin); 49 scanf("%d",&t); 50 while(t--){ 51 memset(head,-1,sizeof(head)); 52 scanf("%d",&N); 53 int k = 1; 54 for(int i = 1;i <= N-1;i ++){ 55 scanf("%d%d",&u,&v); 56 addedge(u,v,k++); 57 addedge(v,u,k++); 58 } 59 memset(vis,0,sizeof(vis)); 60 dfs(1); 61 memset(vis,0,sizeof(vis)); 62 dfs_partition(1); 63 sort(P+1,P+N+1); 64 printf("%d %d ",P[1].id,P[1].par); 65 } 66 return 0; 67 }