Pagini recente » Cod sursa (job #2140028) | Cod sursa (job #1276245) | Cod sursa (job #1331947) | Cod sursa (job #30112) | Cod sursa (job #2235679)
#include <fstream>
#include <list>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int NMax = 100005;
int k[NMax], ans[NMax], father[NMax], N, stec[NMax];
list <int> g[NMax];
void ReadData()
{
int i, j;
fin >> N;
for(i = 1; i <= N; i++)
fin >> k[i];
for(int it = 1; it < N; it++)
{
fin >> i >> j;
father[j] = i;
g[i].push_back(j);
}
}
int Root()
{
int i = 1;
for(; father[i]; i++);
return i;
}
void DFS(int node, int level)
{
stec[level] = node;
if(k[node])
ans[node] = 1 + ans[stec[level - k[node]]];
for(const auto &it : g[node])
DFS(it,level + 1);
}
void Print()
{
for(int i = 1; i <= N; i++)
fout << ans[i] << ' ';
}
int main()
{
ReadData();
DFS(Root(), 1);
Print();
}