Nu aveti permisiuni pentru a descarca fisierul grader_test11.ok
Cod sursa(job #146471)
Utilizator | Data | 1 martie 2008 19:29:39 | |
---|---|---|---|
Problema | Parcurgere DFS - componente conexe | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.35 kb |
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10001
int *a[N];
int n;
struct dublet //:))
{
int x,y;
};
dublet d[N];
int subord[N];
void df(int);
int compara(const void* a, const void* b)
{
return (subord[*((int*)b)]-subord[*((int*)a)]);
}
int timp(int x)
{
int max=0,tc;
for(int i=1;i<=a[x][0];++i)
{
tc=timp(a[x][i])+i;
if(tc>max) max=tc;
}
return max;
}
inline void rezolva_test()
{
scanf("%d",&n);
if(n==1)
{
printf("0\n");
return;
}
int i;
int v[N]={0};
for(i=1;i<=n-1;++i)
{
scanf("%d%d",&d[i].x,&d[i].y);
++v[d[i].x];
}
for(i=1;i<=n;++i)
{
a[i]=new int[v[i]+1];
a[i][0]=0;
}
for(i=1;i<=n-1;++i)
{
a[d[i].x][++a[d[i].x][0]]=d[i].y;
}
//am creat listele de adiacenta;
df(1);
//creez vectorul in care numar subordonatii fiecarui angajat :D
for(i=1;i<=n;++i)
{
qsort(a[i]+1,a[i][0],sizeof(int),compara);
}
printf("%d\n",timp(1));
for(i=1;i<=n;i++)
{
delete(a[i]);
}
memset(subord,0,sizeof(int)*N);
}
void df(int x)
{
int i;
for(i=1;i<=a[x][0];++i)
{
df(a[x][i]);
subord[x]+=subord[a[x][i]];
}
subord[x]++;
}
int main()
{
int t;
freopen("zvon.in","r",stdin);
freopen("zvon.out","w",stdout);
scanf("%d",&t);
for(int tc=0;tc<t;++tc) rezolva_test();
fclose(stdin);
fclose(stdout);
return 0;
}