Pagini recente » Cod sursa (job #1306965) | Cod sursa (job #495800) | Cod sursa (job #1924364) | Cod sursa (job #3193784) | Cod sursa (job #2955431)
#include <bits/stdc++.h>
using namespace std;
int t[100003];
vector<int> graf[100003];
int uwu[100003];
int dp[100003];
int a[100003];
void dfs(int nod, int level){
uwu[level] = nod;
if(a[nod] == 0){
dp[nod] = 0;
}else{
dp[nod] = dp[uwu[level - a[nod]]] + 1;
}
for(auto nodut: graf[nod]){
dfs(nodut,level+1);
}
}
int main(void){
ofstream cout("cerere.out");
ifstream cin("cerere.in");
int n;
cin >> n;
for(int i = 1;i<=n;i++){
cin >> a[i];
}
for(int i = 1;i<n;i++){
int x, y;
cin >> x >> y;
graf[x].push_back(y);
t[y] = x;
}
int rizz = 0;
for(int i = 1;i<=n;i++){
if(t[i] == 0){
/// nu are un tata (deci este radacina)
rizz = i;
break;
}
}
/// parcurgem aroborele din radacina in jos
dfs(rizz,1);
for(int i = 1;i<=n;i++)cout << dp[i] << ' ';
}