就像是這樣
#include <stdio.h> #include <stdlib.h> int output; int map[100000][3]; int r[1000000]; int r_h,r_t,r_count,r_control; int N; int dad,son; int main() { while(scanf("%d",&N)!=0){ for(int i =0;i<N;i++){ map[i][0]=-1; } for(int i=1;i<N;i++){ scanf("%d%d",&dad,&son); map[son][0]=dad; map[dad][1]=-1; } r_count=0; r_h=0; for(int i=0;i<N;i++){ if(map[i][1]==0){ r[r_count]=i; r_count++; } } r_t=r_count-1; r_control=0; while(r_control==0){ for(int i=r_h;i<=r_t;i++){ if(map[r[i]][0]==-1){ r_control=1; break; } if(map[map[r[i]][0]][1]<(map[r[i]][1]+1)){ map[map[r[i]][0]][2]=map[map[r[i]][0]][1]; map[map[r[i]][0]][1]=map[r[i]][1]+1; } else if(map[map[r[i]][0]][2]<(map[r[i]][1]+1)){ map[map[r[i]][0]][2]=map[r[i]][1]+1; } r[r_count]=map[r[i]][0]; r_count++; } r_h=r_t+1; r_t=r_count-1; } output = 0; for(int i=0;i<N;i++){ if(output<map[i][1]+map[i][2]) output = map[i][1]+map[i][2]; else if(output<map[i][1]+1) output = map[i][1]+1; } printf("%d\n",output); } return 0; }