Pagini recente » Cod sursa (job #1950719) | Cod sursa (job #322136) | Cod sursa (job #2805117) | Cod sursa (job #1067792) | Cod sursa (job #1933368)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector <int> Graph[100002];
int N, radacina, grad_interior[100002];
int Stramosi[100002];
int G[100002];
int St[100002], varf;
void DFS(int node)
{
St[++varf] = node;
if (Stramosi[node] == 0)
G[node] = 0;
else
G[node] = G[St[varf - Stramosi[node]]] + 1;
for (const int & x : Graph[node])
DFS(x);
--varf;
}
int main()
{
f >> N;
for (int i = 1; i <= N; ++i)
f >> Stramosi[i];
for (int i = 1; i < N; ++i)
{
int x, y;
f >> x >> y;
Graph[x].push_back(y);
++grad_interior[y];
}
for (int i = 1; i <= N; ++i)
if (grad_interior[i] == 0)
radacina = i;
DFS(radacina);
for (int i = 1; i <= N; ++i)
g << G[i] << " ";
f.close();
g.close();
return 0;
}