Cod sursa(job #1093904)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 28 ianuarie 2014 19:04:55
Problema Diametrul unui arbore Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<cstdio>
#include<vector>
#include<deque>
#include<cstring>

using namespace std;

const int NMAX = 100005;

int N,Nod,Sol;
int Viz[NMAX];
vector<int> V[NMAX];
deque<int> Q;

void BFS(int x)
{
    vector<int>::iterator it;
    memset(Viz,0,sizeof(Viz));
    Nod=Sol=0;

    Q.push_back(x);
    Viz[x]=1;

    for(; !Q.empty();)
    {
        x=Q.front();
        Q.pop_front();

        for(it=V[x].begin(); it!=V[x].end(); it++)
        {
            if(Viz[*it]) continue;
            Q.push_back(*it);
            Viz[*it]=Viz[x]+1;
        }

        if(Viz[x]>Sol)
        {
            Nod=x;
            Sol=Viz[x];
        }
    }
}

int main()
{
    int i,x,y;

    freopen("darb.in","r",stdin);
    freopen("darb.out","w",stdout);

    scanf("%d",&N);

    for(i=1; i<=N-1; i++)
    {
        scanf("%d%d",&x,&y);
        V[x].push_back(y);
        V[y].push_back(x);
    }

    BFS(1);
    BFS(Nod);

    printf("%d\n",Sol);

    return 0;
}