Cod sursa(job #1245254)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 18 octombrie 2014 20:33:07
Problema Diametrul unui arbore Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <bitset>
#include <queue>
#include <vector>

using namespace std;

vector<int> graf[100005];

int n;
int dist[100005];
queue<int> coada;
bitset<100005> viz;

int bfs(int nod){
    viz&=0;

    viz[nod]=1;
    dist[nod]=1;
    coada.push(nod);

    int y;
    vector<int>::iterator it;
    while(!coada.empty()){
        y=coada.front();
        coada.pop();

        for(it=graf[y].begin();it!=graf[y].end();it++)
            if(!viz[*it]){
                viz[*it]=1;
                dist[*it]=dist[y]+1;
                coada.push(*it);
            }
    }

    int maxim=0;
    int x=0;

    for(int i=1;i<=n;i++)
        if(dist[i]>maxim){
            maxim=dist[i];
            x=i;
        }

    return x;
}

int main()
{
    ifstream cin("darb.in");
    ofstream cout("darb.out");

    ios_base::sync_with_stdio(false);

    int m=0;
    cin>>n;
    m=n;

    m--;

    int a,b;
    while(m--){
        cin>>a>>b;

        graf[a].push_back(b);
        graf[b].push_back(a);
    }

    a=bfs(1);
    b=bfs(a);

    cout<<dist[b]<<'\n';

    cin.close();
    cout.close();
    return 0;
}