Pagini recente » Cod sursa (job #2466655) | Cod sursa (job #616019) | Cod sursa (job #2210356) | Cod sursa (job #844238) | Cod sursa (job #2438761)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int n, i, j, k_list[100005], g_list[100005];
vector<int> graph[100005], list;
bool check[100005];
void dfs(int node);
int main()
{
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
scanf("%d", &n);
for(i=1; i<=n; ++i) {scanf("%d", &k_list[i]); g_list[i]=-1;}
for(i=2; i<=n; ++i) {
int x, y;
scanf("%d%d", &x, &y);
graph[x].push_back(y);
check[y]=true;
}
for(i=1; i<=n; ++i) if(check[i]==false) {dfs(i); break;}
for(i=1; i<=n; ++i) printf("%d ", g_list[i]);
return 0;
}
void dfs(int node){
list.push_back(node);
g_list[node]=g_list[list[list.size()-1-k_list[node]]]+1;
for(auto j:graph[node]) dfs(j);
list.pop_back();
return;
}