Cod sursa(job #1905675)

Utilizator alexburdescuBurdescu Alexandru alexburdescu Data 6 martie 2017 10:12:14
Problema Diametrul unui arbore Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("darb.in");
ofstream fout("darb.out");
int a[100000];
int main ()
{
    int n,z,y;
    fin>>n;
    a[1]=0;
    for( int i =1; i<=n-1; i++)
    {
        fin>>z;
        fin>>y;
        a[y]=z;
    }
    int p,k,st[100000],viz[100000]={0},c[100000];
    st[1]=1;
    p=1;
    viz[1]=1;
    int i=1;
    c[1]=1;
    while(p>0)
    {
        k=1;
        while((k<=n && a[k]!=st[p]) || (a[k]==st[p] && viz[k]==1))
        {
            k++;
        }
            if(k>n)
            {
                p--;
                if(p==1)
                {
                    i++;
                    c[i]=1;
                }
            }
            else
            {
                p++;
                st[p]=k;
                viz[k]=1;
                if(p>c[i])
                {
                    c[i]=p;
                }
            }
    }
    int max1=0,max2=0;
    for(int j=1; j<=i;j++)
    {
        if(c[j]>max1)
        {
            max2=max1;
            max1=c[j];
        }
        else if(c[j]>max2)
        {
            max2=c[j];
        }
    }
    fout<<max1+max2-1;
    fout.close();
    fin.close();
    return 0;
}