Pagini recente » Cod sursa (job #3273960) | Cod sursa (job #1061219) | Cod sursa (job #2264480) | Cod sursa (job #1676713) | Cod sursa (job #253236)
Cod sursa(job #253236)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define N 100010
using namespace std;
int rez[N],t,n,x,y,i,V[N],fii[N];
vector<int> L[N];
bool cmp(int i, int j)
{
return rez[i]>rez[j];
}
int maxim(int nod)
{
vector<int>::iterator it;
int mmax=0,kont=0;
for (it=L[nod].begin(); it!=L[nod].end(); it++)
V[++kont]=*it;
sort(V+1,V+kont+1,cmp);
for (i=1; i<=kont; i++)
if (i+rez[V[i]]>mmax)
mmax=i+rez[V[i]];
return mmax;
}
void zvon(int nod)
{
vector<int>::iterator it;
for (it=L[nod].begin(); it!=L[nod].end(); it++)
{
int nr=*it;
if (fii[nr])
{
zvon(nr);
fii[nr]=0;
fii[nod]--;
}
else fii[nod]--;
}
if (!fii[nod])
rez[nod]=maxim(nod);
}
int main()
{
freopen("zvon.in","r",stdin);
freopen("zvon.out","w",stdout);
scanf("%d\n",&t);
while (t--)
{
scanf("%d\n",&n);
for (i=1; i<n; i++)
{
scanf("%d%d\n",&x,&y);
L[x].push_back(y);
fii[x]++;
}
zvon(1);
printf("%d\n",rez[1]);
memset(rez,0,sizeof(rez));
memset(fii,0,sizeof(fii));
for (i=1; i<=n; i++) L[i].clear();
}
return 0;
}