Cod sursa(job #1672453)

Utilizator robertkarolRobert Szarvas robertkarol Data 2 aprilie 2016 19:09:26
Problema Diametrul unui arbore Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("darb.in");
ofstream fout("darb.out");
int viz[100001],nr[100001],last,diametru,n,i,x,y;
vector<int> a[100001]; queue<int> c;
void bf(int p)
{
    memset(viz,0,sizeof(viz)); memset(nr,0,sizeof(nr));
    int i,prim=1,ultim=1,nod;
    c.push(p); viz[p]=1; nr[p]=1;
    while(!c.empty())
    {
        nod=c.front(); c.pop();
        for(i=0;i<a[nod].size();i++)
            if(!viz[a[nod][i]])
        {
            c.push(a[nod][i]);
            viz[a[nod][i]]=1;
            nr[a[nod][i]]=nr[nod]+1;
            diametru=nr[a[nod][i]];
            last=a[nod][i];
        }
    }
}
int main()
{
    fin>>n;
    for(i=1;i<n;i++)
    {
        fin>>x>>y;
        a[x].push_back(y);
        a[y].push_back(x);
    }
    bf(1); bf(last);
    fout<<diametru;
    return 0;
}