Cod sursa(job #1077218)

Utilizator costel93FMI - Dumea Eduard Constantin costel93 Data 10 ianuarie 2014 23:48:40
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 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], viz[100005];


void dfs(int x)
{
    c[++m]=x;
    int i;

    if(viz[x])
        t[x]=0;
    else
      t[x]=t[ c[ m-k[x] ] ] + 1;

    for( i = 0; i < v[x].size(); i++)
        dfs(v[x][i]);
  m--;
}

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]);
        if(k[i]==0)
            viz[i] = 1;
    }

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

    dfs(s);

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

    return 0;
}