Pagini recente » Cod sursa (job #2094237) | Cod sursa (job #2110662) | Cod sursa (job #1840322) | Cod sursa (job #810895) | Cod sursa (job #235153)
Cod sursa(job #235153)
#include <cstdio>
#include <algorithm>
#include <queue>
#define N 100010
using namespace std;
typedef struct noduri
{
int val;
noduri *urm;
} adr;
adr *L[N],*p;
int rez[N],V[N],fii[N],t,n,i,x,y,maxim;
queue<int> C;
bool cmp(int i, int j)
{
return (fii[i]>fii[j]);
}
void dfs(int nod)
{
adr *p;
for (p=L[nod]; p; p=p->urm)
{
dfs(p->val);
fii[nod]+=fii[p->val];
}
}
void zvon() //care e fapt un bfs
{
adr *p;
int i,kont;
for (C.push(1); !C.empty(); C.pop())
{
kont=0;
for (p=L[C.front()]; p; p=p->urm)
{
V[++kont]=p->val;
C.push(p->val);
}
sort(V+1,V+kont+1,cmp);
for (i=1; i<=kont; i++)
{
rez[V[i]]=rez[C.front()]+i;
if (rez[V[i]]>maxim) maxim=rez[V[i]];
}
}
}
int main()
{
freopen("zvon.in","r",stdin);
freopen("zvon.out","w",stdout);
scanf("%d\n",&t);
while (t--)
{
maxim=0;
scanf("%d\n",&n);
for (i=1; i<n; i++)
{
scanf("%d %d\n",&x,&y);
p=new adr;
p->val=y; p->urm=L[x];
L[x]=p;
fii[x]++;
}
dfs(1);
zvon();
//for (i=1; i<=n; i++) printf("%d ",rez[i]); printf("\n\n");
printf("%d\n",maxim);
for (; !C.empty(); C.pop());
for (i=1; i<=n; i++)
{
L[i]=NULL;
rez[i]=0;
fii[i]=0;
}
}
return 0;
}