Pagini recente » Cod sursa (job #2614882) | Cod sursa (job #2801540) | Cod sursa (job #3270340) | Cod sursa (job #1773790) | Cod sursa (job #102868)
Cod sursa(job #102868)
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
#define Nmax 100001
using namespace std;
//struct nod { long inf; struct nod * urm;};
//typedef nod * list;
int t;
long rad, n, i, Rez;
short radPos[Nmax];
vector < long > gr[Nmax];
//long * d[Nmax];
//long nrd=0;
long nrFii[Nmax];
void readNext();
void stergeVect();
long rez(long);
inline long max(long x, long y) { return x>y?x:y; }
long divide(long,long);
void qSort(long,long);
int main()
{
freopen("zvon.in", "r", stdin);
freopen("zvon.out", "w", stdout);
scanf("%d\n", &t);
for (int I=1; I<=t; I++)
{
readNext();
Rez=rez(rad);
printf("%ld\n", Rez);
stergeVect();
}
fclose(stdin);
fclose(stdout);
return 0;
}
void readNext()
{
long x, y;
scanf("%ld\n", &n);
for (i=1; i<n; i++)
{
scanf("%ld %ld\n", &x, &y);
gr[x].push_back(y);
radPos[y]=1;
}
for (i=1; i<=n & radPos[i]; i++);
rad=i;
}
void stergeVect()
{
for (i=1; i<=n; i++)
{
gr[i].erase(gr[i].begin(), gr[i].end());
radPos[i]=0;
nrFii[i]=0;
}
}
long rez(long x)
{
long temp=0, maxim=0;
vector < long > d;
if (!gr[x].size()) return 0;
else
{
//nrd++;
//d[nrd]=new long [nrFii[x] + 3]; //(long *)realloc(d[nrd],(nrFii[x]+3)*sizeof(long));
for (i=0; i<gr[x].size(); i++)
d.push_back(rez(gr[x][i]));
sort(d.begin(),d.end());
temp=d.size();
for (i=1; i<temp; i++)
maxim=max(maxim,d[i-1]+temp-i+1);
d.erase(d.begin(),d.end());
//nrd--;
return maxim;
}
}
/*long divide(long p, long q)
{
long st=p, dr=q, x=d[nrd][p];
while (st < dr)
{
while ( st<dr && d[nrd][dr]>=x ) dr--;
d[nrd][st]=d[nrd][dr];
while ( st<dr && d[nrd][st]<=x ) st++;
d[nrd][dr]=d[nrd][st];
}
d[nrd][st]=x;
return st;
}
void qSort(long p, long q)
{
long m=divide(p,q);
if (m-1>p) qSort(p, m-1);
if (m+1<q) qSort(m+1, q);
}*/