Cod sursa(job #1887646)

Utilizator 1475369147896537415369Andrei Udriste 1475369147896537415369 Data 21 februarie 2017 18:25:15
Problema Diametrul unui arbore Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
#include <queue>
#include <list>
using namespace std;

int vertices, x, y;
list<int> adj[100001];
int visited[100001];

int BFS(int start){
    queue<int> Q;
    Q.push(start);

    for(int i = 1; i <= vertices; i++) visited[i] = 0;
    visited[start]++;

    while(1){
        int current = Q.front(); Q.pop();
        for(list<int> :: iterator it = adj[current].begin(); it != adj[current].end(); it++){
            if(visited[*it] == 0){
                visited[*it] = visited[current] + 1;
                Q.push(*it);
            }
        }if(Q.empty()) return current;
    }
}

int main(){

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

scanf("%d", &vertices);

for(int i = 1; i < vertices; i++){
    scanf("%d %d", &x, &y);
    adj[x].push_back(y);
    adj[y].push_back(x);
}printf("%d", visited[BFS(BFS(1))]);

return 0;
}