Cod sursa(job #788001)

Utilizator maritimCristian Lambru maritim Data 13 septembrie 2012 22:10:42
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;

FILE *f = fopen("zvon.in","r");
FILE *g = fopen("zvon.out","w");

typedef vector<int>::iterator it;

#define MaxN 100100

int N,T;
int Best[MaxN],aux[MaxN];
vector<int> A[MaxN];

void citire(void)
{
    int a,b;

    fscanf(f,"%d ",&N);
    for(int i=1;i<N;i++)
    {
        fscanf(f,"%d %d",&a,&b);
        A[a].push_back(b);
    }
}

inline int max(int a,int b)
{
    return a > b ? a : b;
}

inline void DP(int a)
{
    int j = 0;

    for(it i=A[a].begin();i<A[a].end();i++)
        DP(*i);

    for(it i=A[a].begin();i<A[a].end();i++,j++)
        aux[j] = Best[*i];

    sort(aux+1,aux+A[a].size()+1);

    for(int i=A[a].size();i;i--)
        Best[a] = max(Best[a],aux[i]+A[a].size()-i+1);
}

inline void Dispose(void)
{
    for(int i=1;i<=N;i++)
    {
        A[i].clear();
        Best[i] = 0;
    }
}

int main()
{
    fscanf(f,"%d\n",&T);
    for(int i=1;i<=T;i++)
    {
        citire();
        DP(1);

        fprintf(g,"%d\n",Best[1]);

        Dispose();
    }
}