Pagini recente » Cod sursa (job #2126160) | Cod sursa (job #2418041) | Cod sursa (job #2159193) | Cod sursa (job #685333) | Cod sursa (job #2327510)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
const int MAX = 1e5 + 10;
int n, root;
int ancestors[MAX], solution[MAX];
bool visited[MAX], is_son[MAX];
vector<int> v, monkey[MAX];
void Read()
{
int A, B;
f >> n;
for(int i = 1; i <= n; ++i)
f >> ancestors[i];
for(int i = 1; i < n; ++i)
{
f >> A >> B;
is_son[B] = 1;
monkey[A].push_back(B);
}
for(int i = 1; i <= n; ++i)
if(!is_son[i])
{
root = i;
break;
}
}
void DFS(int node)
{
v.push_back(node);
// Verificam cu cati stramosi ne intoarcem, daca nu este maimuta inteligenta
if(ancestors[node])
solution[node] = 1 + solution[v[(v.size() - 1) - ancestors[node]]];
for(int i = 0; i < monkey[node].size(); ++i)
DFS(monkey[node][i]);
v.pop_back();
}
void Print()
{
for(int i = 1; i <= n; ++i)
g << solution[i] << " ";
}
int main()
{
Read();
DFS(root);
Print();
return 0;
}