Pagini recente » Cod sursa (job #1511198) | zyxwv | Cod sursa (job #3141754) | Cod sursa (job #3134389) | Cod sursa (job #3175283)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("cerere.in");
ofstream g ("cerere.out");
const int NMAX = 1e5;
int k[NMAX+1];
vector<int> adj[NMAX+1];
int lant[NMAX+1];
int rez[NMAX+1];
void dfs(int from, int niv){
if(k[from] == 0)
rez[from] = 0;
else rez[from] = rez[lant[niv - k[from]]] + 1;
lant[niv] = from;
for(int to : adj[from]){
dfs(to, niv+1);
}
}
int main()
{
int n;
f >> n;
for(int i=1; i<=n; i++){
f >> k[i];
}
for(int i=1; i<n; i++){
int x, y;
f >> x >> y;
adj[x].push_back(y);
}
dfs(1, 0);
for(int i=1; i<=n; i++)
g << rez[i] << ' ';
return 0;
}