Pagini recente » Cod sursa (job #787199) | Cod sursa (job #3264729) | Cod sursa (job #90965) | Cod sursa (job #2508615) | Cod sursa (job #478479)
Cod sursa(job #478479)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
int a[100010], n, c[100010], tata[100010], d[100010], viz[100010];
vector<int> son[100010];
int main(){
ifstream f("cerere.in");
ofstream g("cerere.out");
int i, x, y, k, t;
f>>n;
for (i = 1; i <= n; i++)
f>>a[i];
for (i = 1; i <= n-1; i++){
f>>x>>y;
son[x].push_back(y);
tata[y] = x;
}
int rad = 1;
while (tata[rad] != 0)
rad = tata[rad];
int p = 1, u = 1;
c[1] = rad;
while (p <= u){
x = c[p];
viz[x] = 1;
p++;
k = a[x];
if (k != 0){
t = x;
while (k != 0){
t = tata[t];
k--;
}
d[x] = d[t]+1;
}
for (i = 0; i < son[x].size(); i++)
if (viz[son[x][i]] == 0){
u++;
c[u] = son[x][i];
}
}
for (i = 1; i <= n; i++)
g<<d[i]<<" ";
return 0;
}