Cod sursa(job #1068865)

Utilizator tudorv96Tudor Varan tudorv96 Data 28 decembrie 2013 21:14:25
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream fin ("cerere.in");
ofstream fout ("cerere.out");

const int N = 1e5+5;

int n, t[N], s[N], d[N], c[N];
vector <int> g[N];

void dfs(int x, int lvl) {
    s[lvl] = x;
    if (c[x])
        d[x] = d[s[lvl - c[x]]] + 1;
    for (vector <int> :: iterator it = g[x].begin(); it != g[x].end(); ++it)
        dfs(*it, lvl + 1);
}

int main() {
    fin >> n;
    for (int i = 1; i <= n; ++i) {
        fin >> c[i];
        if (c[i])
            d[i]++;
    }
    for (int i = 1; i < n; ++i) {
        int x, y;
        fin >> x >> y;
        g[x].push_back (y);
        t[y] = x;
    }
    int x = 1;
    while (t[x])
        x = t[x];
    dfs(x, 0);
    for (int i = 1; i <= n; ++i)
        fout << d[i] << " ";
}