Cod sursa(job #2391508)

Utilizator Costy_Suruniuc Constantin Costy_ Data 28 martie 2019 22:09:03
Problema Diametrul unui arbore Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <queue>
#include <vector>
#include <fstream>
using namespace std;

void addEdge(vector<int> adj[], int u, int v)
{
	adj[u].push_back(v);
	adj[v].push_back(u);
}

void clear(queue<int> &q)
{
	queue<int> empty;
	swap(q, empty);
}

int main()
{
	ifstream inFile;
	inFile.open("darb.in");
	int N;
	
	inFile >> N;
	vector<int> *nods = new vector<int>[N + 1];
	pair<int, int> edge;
	int *vis = new int[N + 1];
	for (int i = 1; i <= N; ++i)
	{
		vis[i] = 0;
	}
	for (int i = 1; i <= N; i++)
	{
		inFile >> edge.first >> edge.second;
		addEdge(nods, edge.first, edge.second);
	}
	inFile.close();
	queue<int> wList;
	wList.push(1);
	vis[1] = 0;
	int temp;
	while (wList.empty() == false)
	{
		temp = wList.front();
		wList.pop();
		for (auto it : nods[temp])
		{
			if (vis[it] != 0) continue;
			vis[it] = 1;
			wList.push(it);
		}
	}
	for (int i = 1; i <= N; ++i)
	{
		vis[i] = 0;
	}
	wList.push(temp);
	vis[temp] = 1;
	while (wList.empty() == false)
	{
		temp = wList.front();
		wList.pop();
		for (auto it : nods[temp])
		{
			if (vis[it] != 0) continue;
			vis[it] = vis[temp] + 1;
			wList.push(it);
		}
	}
	ofstream outFile;
	outFile.open("darb.out");
	outFile << vis[temp];


}