Pagini recente » Cod sursa (job #1164740) | Cod sursa (job #1213768) | Cod sursa (job #1566688) | Cod sursa (job #2284385) | Cod sursa (job #1464981)
#include <fstream>
#include <vector>
#define NMAX 100001
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int stiva[NMAX], dist[NMAX], k[NMAX], visited[NMAX], father[NMAX], i, n, a, b, m = 0;
vector < int > v[NMAX];
void read()
{
f >> n;
for (i = 1; i <= n; ++ i)
f >> k[i];
for (i = 1; i <= n-1; ++ i)
{
f >> a >> b;
father[b] = a;
v[a].push_back(b);
}
}
int first_father()
{
for (i = 1; i <= n; ++ i)
if (father[i] == 0) return i;
}
void DFS(int node, int level)
{
stiva[level] = node;
dist[node] = dist[stiva[level-k[node]]] + 1;
for (vector < int > :: iterator it = v[node].begin(); it != v[node].end(); ++it)
DFS(*it,level+1);
}
void write()
{
for (i = 1; i <=n ; ++ i)
g << dist[i]-1 << " ";
}
int main()
{
read();
DFS(first_father(),1);
write();
return 0;
}