Cod sursa(job #3207619)

Utilizator alexiksmAgasanov Alecsei alexiksm Data 26 februarie 2024 16:26:25
Problema Diametrul unui arbore Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <cctype>
#include <cstring>
#include <algorithm>
#include <vector>
#include <stack>
#include <string>
#include <deque>
#include <queue>
#include <map>
#include <cmath>
#include <limits.h>

using namespace std;

#pragma warning(disable : 4996)
;

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

int tata[100001], n, dis1[100001], dis2[100001];

void dfs(int i, int dis[]) {
	
	for(int x = 1; x <= n; x++)
		if (x != i && (tata[i] == x || tata[x] == i) && !dis[x]) {
			dis[x] = dis[i] + 1;
			dfs(x, dis);
		}
}

int main() {

	fin >> n;

	for (int i = 1; i < n; i++) {
		int x, y;
		fin >> x >> y;
		tata[y] = x;
	}
	dis1[1] = 1;
	dfs(1, dis1);
	int maxi1 = 1;
	for (int i = 2; i <= n; i++)
		if (dis1[maxi1] < dis1[i]) maxi1 = i;
	dis2[maxi1] = 1;
	dfs(maxi1, dis2);
	int maxi2 = 1;
	for (int i = 2; i <= n; i++)
		if (dis2[maxi2] < dis2[i]) maxi2 = i;

	fout << dis2[maxi2];

	return 0;
}