Cod sursa(job #1572733)

Utilizator DiClauDan Claudiu DiClau Data 19 ianuarie 2016 08:27:59
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
const int N = 100005;
int vf[N], lst[N], urm[N], m, timp[N];
void golire (int n)
{
    m = 0;
    int i;
    for (i = 1; i <= n; i++)
    {
        lst[i] = 0;
        urm[i] = 0;
    }
}
void adauga (int x, int y)
{
    vf[++m] = y;
    urm[m] = lst[x];
    lst[x] = m;
}
int maximum (int ic, int sf)
{
    sort (timp + ic, timp + sf + 1);
    int i, maxim = 0, ct = 1;
    for (i = sf; i >= ic; i--)
    {
        if (timp[i] + ct > maxim)
            maxim = timp[i] + ct;
        ct++;
    }
    return maxim;
}
int dfs (int x, int inceput)
{
    int y, p, sf = inceput;
    p = lst[x];
    while (p != 0)
    {
        y = vf[p];
        timp[++sf] = dfs(y, sf);
        p = urm[p];
    }
    if (sf == inceput)
        return 0;
    else
        return maximum (inceput + 1, sf);
}
int main ()
{
    FILE *in, *out;
    in = fopen ("zvon.in", "r");
    out = fopen ("zvon.out", "w");
    int teste, t, n, i, x, y;
    fscanf (in, "%d", &teste);
    for (t = 1; t <= teste; t++)
    {
        fscanf (in, "%d", &n);
        golire (n);
        for (i = 1; i <= n - 1; i++)
        {
            fscanf (in, "%d%d", &x, &y);
            adauga (x, y);
        }
        fprintf (out, "%d\n", dfs(1, 0));
    }
    return 0;
}