Pagini recente » Cod sursa (job #929545) | Cod sursa (job #1921260) | Cod sursa (job #393364) | Cod sursa (job #1826949) | Cod sursa (job #130548)
Cod sursa(job #130548)
#include <stdio.h>
#include <vector>
#include <stdlib.h>
#define inf 1000000000
using namespace std;
long t,n,i,x,y,q[100002];
long niv[100002],d[100002];
vector<long> l[100002];
vector<long> v(100002);
long dfs(long x){
long maxim=0;
long i,a;
if (q[x]>-1){
for (i=0;i<=q[x];i++){
a=dfs(l[x][i]);
if (a>maxim)maxim=a;
}
niv[x]=maxim+1;
}
else niv[x]=1;
return niv[x];
}
int comp(const void *n1,const void *n2){
return (v[*((long*)n2)]-v[*((long*)n1)]);
}
void drum(long x,long timp){
d[x]=timp;
const long lung=q[x]+1;
long i,ind[lung];
for (i=0;i<=q[x];i++){
ind[i]=i;
v[i]=niv[l[x][i]];
}
if (q[x]>-1)qsort(ind,q[x]+1,sizeof(long),comp);
for (i=0;i<=q[x];i++){
drum(l[x][ind[i]],timp+i+1);
}
}
int main(){
freopen("zvon.in","r",stdin);
freopen("zvon.out","w",stdout);
long maxim;
scanf("%ld",&t);
for (;t;t--){
scanf("%ld",&n);
for (i=1;i<=n;i++){q[i]=-1;l[i].clear();}
for (i=1;i<n;i++){
scanf("%ld %ld",&x,&y);
q[x]++;
l[x].push_back(y);
}
dfs(1);
/*for (i=1;i<=n;i++)
printf("%ld ",niv[i]);
printf("\n");
*/
drum(1,0);
maxim=0;
for (i=1;i<=n;i++)
if (d[i]>maxim)maxim=d[i];
printf("%ld\n",maxim);
}
return 0;
}