Cod sursa(job #193608)

Utilizator hadesgamesTache Alexandru hadesgames Data 5 iunie 2008 13:28:37
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <utility>
#include <functional>
using namespace std;
#define pb push_back
#define mp make_pair
#define all(c) (c).begin(),(c).end()
vector<vector<int> > a(100005);
int t[100005],trecut[100005];
inline int maxc(int x,int y) { return x>y?x:y;}
bool comp(const int &x,const int &y)
{
	return x>=y?1:0;
}
void dfs(int x)
{
	vector<int> aux;
	trecut[x]=1;
	for (vector<int>::iterator it=a[x].begin();it!=a[x].end();it++)
		if(!trecut[*it])
		{
			dfs(*it);
			aux.pb(t[*it]);
		}
	sort(all(aux),comp);
	for (vector<int>::iterator it=aux.begin();it!=aux.end();it++)
	{
		t[x]=maxc(t[x],*it+it-aux.begin()+1);
	//	printf("%d\n",
	}
}
int main()
{
	FILE *in,*out;
	int n,T,i,x,y;
	in=fopen("zvon.in","r");
	out=fopen("zvon.out","w");
	fscanf(in,"%d",&T);
	for (;T;T--)
	{
		for (i=1;i<=n;i++)
			a[i].erase(all(a[i]));
		fscanf(in,"%d",&n);
		for (i=1;i<=n-1;i++)
		{
			fscanf(in,"%d%d",&x,&y);
			a[x].pb(y);
		}
		fill(t,t+n+3,0);
		fill(trecut,trecut+n+3,0);
		dfs(1);
		fprintf(out,"%d\n",t[1]);
	}
	fclose(in);
	fclose(out);
	return 0;
}