Cod sursa(job #1268812)

Utilizator radarobertRada Robert Gabriel radarobert Data 21 noiembrie 2014 15:31:27
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
#include <vector>

using namespace std;

vector<int> g[100001];
int k[100001], fw[100001], father[100001];

int main()
{
    FILE *in = fopen("cerere.in", "r");
    FILE *out = fopen("cerere.out", "w");

    int n;
    fscanf(in, "%d", &n);

    for (int i = 1; i <= n; ++i)
        fscanf(in, "%d", &k[i]);
    for (int x, y, i = 1; i < n; ++i)
    {
        fscanf(in, "%d%d", &x, &y);
        father[y] = x;
    }
    for (int i = 1; i <= n; ++i)
    {
        fw[i] = i;
        for (int j = 1; j <= k[i]; ++j)
            fw[i] = father[fw[i]];
    }

    for (int i = 1; i <= n; ++i)
    {
        int x = i;
        int l = 0;
        while (k[x] > 0)
        {
            l++;
            x = fw[x];
        }
        if (i > 1)
            fprintf(out, " %d", l);
        else
            fprintf(out, "%d", l);
    }
    fprintf(out, "\n");

    return 0;
}