Cod sursa(job #1896267)

Utilizator flibiaVisanu Cristian flibia Data 28 februarie 2017 16:24:27
Problema Diametrul unui arbore Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define st first
#define nd second

using namespace std;

ifstream in("darb.in");
ofstream out("darb.out");

int t, rs, ans, n, m, x, y; bool viz[100100];
vector <int> v[100100];
queue <pair <int, int> > q;

void bfs(int nod){
	memset(viz, 0, sizeof(viz));
	int ans = 0;
	viz[nod] = 1;
	rs = 0; pair <int, int> x;
	q.push(mp(nod, ans));
	while(!q.empty()){
		x = q.front();
		q.pop();
		for(auto it : v[x.st])
			if(!viz[it]){
				viz[it] = 1;
				q.push(mp(it, x.nd+1));
			}
	}
	memset(viz, 0, sizeof(viz));
	ans = 0;
	nod = x.st; 
	viz[nod] = 1;
	q.push(mp(nod, ans));
	while(!q.empty()){
		x = q.front();
		q.pop();
		for(auto it : v[x.st])
			if(!viz[it]){
				viz[it] = 1;
				q.push(mp(it, x.nd+1));
			}
	}
	rs = x.nd;
}

int main(){
	in >> n;
	for(int i = 1; i < n; i++){
		in >> x >> y;
		v[x].pb(y);
		v[y].pb(x);
	}
	bfs(1);
	out << rs+1;
	return 0;
}