Pagini recente » Cod sursa (job #1107056) | Istoria paginii utilizator/raluca_aida | Cod sursa (job #1215464) | Clasament proba_pregatire_ioit | Cod sursa (job #1557052)
#include <cstdio>
#include<algorithm>
#define MAX1 100000
using namespace std;
struct vecini{
int val;
vecini *next;
};
vecini *v[MAX1+1];
int fii[MAX1+1];
int d[MAX1+1];
int max(int a, int b)
{
if(a>b)
return a;
return b;
}
void adauga(int nod, int vecin)
{
vecini *aux;
aux=new vecini;
aux->val=vecin;
aux->next=v[nod];
v[nod]=aux;
fii[nod]++;
}
bool descresc(int a, int b)
{
if(a>b)
return true;
return false;
}
int f[MAX1+1];
void dfs(int nod)
{
int i, maxim=0, k=0;
vecini *aux;
if(v[nod]==NULL){
d[nod]=0;
return;
}
aux=v[nod];
while(aux!=NULL)
{
dfs(aux->val);
aux=aux->next;
}
aux=v[nod];
while(aux!=NULL){
f[++k]=d[aux->val];
aux=aux->next;
}
sort(f+1, f+k+1, descresc);
for(i=1;i<=k;i++)
maxim=max(maxim, f[i]+i);
d[nod]=maxim;
}
int main()
{
freopen("zvon.in", "r", stdin);
freopen("zvon.out", "w", stdout);
int i, t, n, a, x, y;
scanf("%d", &t);
for(a=1;a<=t;a++)
{
scanf("%d", &n);
for(i=1;i<n;i++)
{
scanf("%d%d", &x, &y);
adauga(x, y);
}
dfs(1);
printf("%d\n", d[1]);
for(i=1;i<=n;i++){
v[i]=0;
fii[i]=0;
}
}
return 0;
}