Pagini recente » Cod sursa (job #2125888) | Cod sursa (job #2917794) | Cod sursa (job #1711701) | Borderou de evaluare (job #2013276) | Cod sursa (job #2541702)
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 100000
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n, nrm[NMAX], r[NMAX], strmm[NMAX], rad;
vector<int> gr[NMAX], v;
void read() {
fin >> n;
for (int i = 1; i <= n; i++)
fin >> strmm[i];
for (int i = 1; i < n; i++) {
int x, y;
fin >> x >> y;
gr[x].push_back(y);
r[y] = x;
}
}
void dfs(int nod, int t) {
v.push_back(nod);
if (strmm[nod] == 0)
nrm[nod] = 0;
else
nrm[nod] = nrm[v[v.size() - strmm[nod] - 1]] + 1;
for (int i = 0; i < gr[nod].size(); i++)
if (gr[nod][i] != t)
dfs(gr[nod][i], nod);
v.pop_back();
}
int main(int argc, const char * argv[]) {
read();
rad = 1;
while (r[rad])
rad = r[rad];
dfs(rad, 0);
for (int i = 1; i <= n; i++)
fout << nrm[i] << " ";
}