Cod sursa(job #1557052)

Utilizator antanaAntonia Boca antana Data 26 decembrie 2015 17:31:57
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#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;
}