Cod sursa(job #1833175)

Utilizator teodoramusatoiuTeodora Musatoiu teodoramusatoiu Data 21 decembrie 2016 20:55:55
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

int t,n;
int nrd[100005], timp[100005];

vector <int> a[100005];

bool cmp (int x, int y)
{
	return (nrd[x]>nrd[y]);
}

void dfs1 (int x)
{
	int i,y;
	nrd[x]=1;
	for(i=0;i<a[x].size();i++)
	{
		y=a[x][i];
		dfs1(y);
		nrd[x]+=nrd[y];
	}

}

void dfs2 (int x)
{
	int i,y;
	timp[x]=0;
	for(i=0;i<a[x].size();i++)
	{
		y=a[x][i];
		dfs2(y);
		timp[x]= max( 1+i+timp[y], timp[x]);
	}
}

int main()
{
    in>>t;
	int i,j,k,x,y;
	for(k=1;k<=t;k++)
	{
		in>>n;
		for(i=1;i<n;i++)
		{
			in>>x>>y;
			a[x].push_back(y);
		}

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

		/*for(i=1;i<=n;i++)
			out<<nrd[i]<<" ";
		out<<'\n';*/

		for(i=1;i<=n;i++)
			sort(a[i].begin(), a[i].end(), cmp);

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

		out<<timp[1]<<'\n';

		for (i = 1; i <= n; i++)
			a[i].clear();
	}
    return 0;
}