Pagini recente » Cod sursa (job #1578431) | Cod sursa (job #2088765) | Cod sursa (job #1592094) | Cod sursa (job #1532537) | Cod sursa (job #1073075)
#include <fstream>
#include <vector>
#include <cstring>
#define NMAX 100002
using namespace std;
vector<int> tree[NMAX];
vector<int> k;
vector<int> lant;
int g[NMAX];
int rad, n;
ifstream in("cerere.in");
ofstream out("cerere.out");
void read() {
in>>n;
char root[n + 1];
memset(root,0, sizeof(root));
k.push_back(0);
for (int i = 0; i < n; i++) {
int a;
in>>a;
k.push_back(a);
}
for (int i = 0; i < n-1; i++) {
int a, b;
in>>a>>b;
tree[a].push_back(b);
root[b] = 1;
}
for (int i = 1; i <= n; i++) {
if (!root[i]) {
rad = i;
return;
}
}
}
void dfs(int nod) {
if (k[nod] == 0) {
g[nod] = 0;
} else {
g[nod] = g[lant[lant.size() - k[nod] - 1]] + 1;
}
for (int i = 0; i < tree[nod].size(); i++) {
lant.push_back(tree[nod][i]);
dfs(tree[nod][i]);
lant.pop_back();
}
}
void print() {
for (int i = 1; i <= n; i++) {
out<<g[i]<<" ";
}
}
int main() {
read();
lant.push_back(rad);
dfs(rad);
print();
return 0;
}