Pagini recente » Cod sursa (job #45353) | Cod sursa (job #2663631) | Cod sursa (job #3003369) | Cod sursa (job #2172317) | Cod sursa (job #1597233)
#include <cstdio>
#define MAXN 100000
int v[MAXN],next[MAXN],ind[MAXN+1],grad[MAXN+1],timp[MAXN+1],nod[MAXN],F[MAXN];
inline void swap(int b,int e,int *x){
int aux=x[b];
x[b]=x[e];
x[e]=aux;
}
void myqsort(int begin,int end){
int b=begin,e=end,pivot=F[(b+e)/2];
while(b<=e){
while(F[b]<pivot) b++;
while(F[e]>pivot) e--;
if(b<=e){
swap(b,e,F);
swap(b,e,nod);
b++;e--;
}
}
if(begin<e) myqsort(begin,e);
if(b<end) myqsort(b,end);
}
void DFS(int x){
int poz,n,con,i;
poz=ind[x];
n=0;
while(poz>0){
F[n]=grad[v[poz]];
nod[n]=v[poz];
n++;
poz=next[poz];
}
if(n>0){
myqsort(0,n-1);
con=timp[x]+1;
for(i=n-1;i>=0;i--){
timp[nod[i]]=con;
con++;
}
poz=ind[x];
while(poz>0){
DFS(v[poz]);
poz=next[poz];
}
}
}
inline int cauta(int x){
int poz;
if(grad[x]==0){
poz=ind[x];
while(poz>0){
if(grad[v[poz]]==0)
grad[v[poz]]=cauta(v[poz]);
grad[x]+=grad[v[poz]];
poz=next[poz];
}
}
return grad[x];
}
int main(){
FILE*fi,*fout;
int t,n,i,max,x,y;
fi=fopen("zvon.in" ,"r");
fout=fopen("zvon.out" ,"w");
fscanf(fi,"%d" ,&t);
while(t>0){
t--;
fscanf(fi,"%d" ,&n);
for(i=1;i<n;i++){
fscanf(fi,"%d%d" ,&x,&y);
next[i]=ind[x];
ind[x]=i;
v[i]=y;
}
for(i=1;i<=n;i++)
grad[i]=cauta(i);
timp[1]=0;
DFS(1);
max=0;
for(i=1;i<=n;i++){
if(timp[i]>max)
max=timp[i];
grad[i]=ind[i]=timp[i]=0;
}
fprintf(fout,"%d\n" ,max);
}
fclose(fi);
fclose(fout);
return 0;
}