Cod sursa(job #1261782)

Utilizator rebound212Mihnea Savu rebound212 Data 12 noiembrie 2014 18:15:26
Problema Diametrul unui arbore Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <vector>
#include <set>
#include <algorithm>
#include <cctype>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <cstring>
#include <string>
#include <cstdio>
#include <climits>

#define PII pair < int , int >
#define MP make_pair
#define PB push_back
#define F first
#define S second
#define LL long long
#define NMAX 20
using namespace std;
int sol[10001],x,y,nivel,n,dist,q[100001],p,u,d[100001];
bool ok[100001];
vector <int> g[100001];

void bfs(int nod)
{
  memset(q,0,sizeof(q));
     p=u=1;
     q[p]=nod;
       d[nod]=1;
    while(p<=u)
    {
        nod=q[p];

       ok[nod]=true;
        for(vector <int> :: iterator it=g[nod].begin(); it!=g[nod].end();it++)
        {
            if(!ok[*it]){q[++u]=*it;  d[*it]=d[nod]+1; }
        }

        p++;
    }
}
int main()
{    freopen("darb.in","r",stdin);
    freopen("darb.out","w",stdout);
    scanf("%d",&n);
    int i;


    for(i=1;i<n;i++)

    {
        scanf("%d %d",&x,&y);
        g[x].PB(y);
    }
    for(vector <int> :: iterator it=g[1].begin(); it!=g[1].end();it++)
    {
    int r=*it;
        bfs(r);
    }

sort(d+1,d+n+1);
printf("%d",d[n]+d[n-1]+1);

    return 0;
}