Pagini recente » Cod sursa (job #1340273) | Cod sursa (job #1652166) | Cod sursa (job #2598849) | Cod sursa (job #357403) | Cod sursa (job #1887334)
#include <stdio.h>
#include <vector>
#include <algorithm>
#define N 100005
using namespace std;
vector<int> graf[N];
int teste,n,i,a,b,sol;
int t[N]; //t[i]=timpul necesar subarboreluj care incepe cu i pentru a trimite informatia
bool viz[N];
bool cond(int a, int b)
{
return a>b;
}
void dfs(int x)
{
int i,tmax,m;
vector<int> fii;
viz[x]=true;
tmax=0;
for(i=0;i<graf[x].size();i++)
{
dfs(graf[x][i]);
fii.push_back(t[graf[x][i]]);
}
sort(fii.begin(),fii.end(),cond);
for(i=0,m=1; i<fii.size(); i++,m++)
if(m+fii[i]>tmax)
tmax=m+fii[i];
//for(i=0;i<fii.size();i++)
// printf("%d ",fii[i]);
//printf("\n");
t[x]=tmax;
}
void sterge()
{
for(int i=1;i<=n;i++)
{
viz[i]=false;
graf[i].clear();
t[i]=0;
}
}
int main()
{
FILE *f1,*f2;
f1=fopen("zvon.in","r");
f2=fopen("zvon.out","w");
fscanf(f1,"%d",&teste);
while(teste--)
{
///citire
fscanf(f1,"%d",&n);
for(i=1;i<n;i++)
{
fscanf(f1,"%d%d",&a,&b);
graf[a].push_back(b);
}
///rezolvare
sol=0;
for(i=1;i<=n;i++)
{
if(!viz[i])
dfs(i);
if(t[i]>sol)
sol=t[i];
}
fprintf(f2,"%d\n",sol);
sterge();
}
return 0;
}