Pagini recente » Cod sursa (job #179447) | Cod sursa (job #659987) | Cod sursa (job #1258499) | Cod sursa (job #2632192) | Cod sursa (job #2190844)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
ifstream in("cerere.in");
ofstream out("cerere.out");
const int NMAX = 100005;
int n,kth[NMAX],sol[NMAX],viz[NMAX],st[NMAX],nr_elem;
vector<int> v[NMAX];
void dfs(int nod){
st[++nr_elem] = nod;
if(kth[nod] != 0)
sol[nod] = sol[st[nr_elem-kth[nod]]] + 1;
for(auto fiu : v[nod])
dfs(fiu);
--nr_elem;
}
int main()
{
in>>n;
for(int i = 1 ; i <= n ; ++i)
in>>kth[i];
int a,b,r;
for(int i = 1 ; i < n ; ++i){
in>>a>>b;
v[a].push_back(b);
viz[b] = 1;
}
for(int i = 1 ; i <= n ; ++i)
if(!viz[i])
r = i;
for(int i = 1 ; i <= n ; ++i)
viz[i] = 0;
dfs(r);
for(int i = 1 ; i <= n ; ++i)
out<<sol[i]<<" ";
return 0;
}