返回列表 發帖
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int root,res, finalmaxchilddis;
  4. int n;
  5. struct Node
  6. {
  7.    int h=0,maxchilddis=-1,parent=-1,max=-1,sec=-1;
  8.    vector<int> child;
  9. };
  10. int main()
  11. {
  12.     while(cin>>n)
  13.     {
  14.         finalmaxchilddis=-1;
  15.         Node node[n];
  16.         for(int i=0;i<n-1;i++)
  17.         {
  18.             int p,c;
  19.             cin>>p>>c;
  20.             node[c].parent=p;
  21.             node[p].child.push_back(c);
  22.         }
  23.         for(int i=0;i<n;i++)
  24.         {
  25.             if(node[i].parent==-1)
  26.             {
  27.                 root=i;
  28.             }
  29.             if(node[i].child.size()==0)
  30.             {
  31.                 int h=0;
  32.                 int parent=node[i].parent;
  33.                 while(parent!=-1)
  34.                 {
  35.                   h++;
  36.                   if(h>node[parent].h)
  37.                     node[parent].h=h;
  38.                   else
  39.                     break;
  40.                     parent=node[parent].parent;
  41.                 }
  42.             }
  43.         }

  44.         for(int i=0;i<n;i++)
  45.         {
  46.              if(node[i].child.size()>=2)
  47.             {

  48.                 for(int j=0;j<node[i].child.size();j++)
  49.                 {
  50.                   int childh=node[node[i].child[j]].h;
  51.                   
  52.                   
  53.                   if(childh>node[i].max)
  54.                   {
  55.                       node[i].sec=node[i].max;
  56.                       node[i].max=childh;
  57.                   }
  58.                   else if(childh>node[i].sec)
  59.                       node[i].sec=childh;
  60.                 }
  61.                 node[i].maxchilddis=node[i].max+node[i].sec+2;
  62.                 if(node[i].maxchilddis>finalmaxchilddis)
  63.                 {
  64.                     finalmaxchilddis=node[i].maxchilddis;
  65.                 }
  66.             }
  67.         }

  68.         if(node[root].h>finalmaxchilddis)
  69.         {
  70.              res=node[root].h;
  71.         }else
  72.         {
  73.              res=finalmaxchilddis;
  74.         }
  75.                         
  76.     cout<<res<<endl;

  77.     }

  78.     return 0;
  79. }
複製代碼

TOP

返回列表