Cod sursa(job #1077214)

Utilizator costel93FMI - Dumea Eduard Constantin costel93 Data 10 ianuarie 2014 23:40:43
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<fstream>
#include<vector>
#include<iostream>
# include <stdio.h>

using namespace std;

vector<int> v[100005];

int n, m, k[100005], i, j, a, b, t[100005], c[100005], f[100005];


void bfs(int x)
{
    int p, u;
    c[1] = x;
    p=1;
    u=1;

    while(p<=u)
    {
        for(int i = 0; i< v[c[p]].size(); i++  )
        {

            c[++u] = v [c[p]] [i];


            if(k[c[u]] == 0)
               t[c[u]] = 0;
            else
            {

                int a = c[u];

                for(int j = 1; j <= k[c[u]]; j++)
                    a = f[a];

                t[c[u]] = t[a] +1;
            }
        }


        p++;
    }
}

int main()
{
    freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);

    int s;
    scanf("%ld",&n);

    s = n*(n+1)/2;

    for( i = 1; i <= n; i++)
        scanf("%ld",&k[i]);

    for( i = 1; i <= n-1; i++)
    {
        scanf("%ld %ld",&a,&b);
        v[a].push_back(b);
        s -= b;
        f[b]  = a;
    }

    bfs(s);

    for( i=1; i<= n; i++)
        printf("%ld ",t[i]);




    return 0;
}