Pagini recente » Cod sursa (job #468883) | antrenamentoji | Cod sursa (job #913110) | Cod sursa (job #2853741) | Cod sursa (job #945767)
Cod sursa(job #945767)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in ("cerere.in");
ofstream out ("cerere.out");
const int MAXN = 100010;
vector <int> Graf[MAXN];
int V[MAXN], St[MAXN], Sol[MAXN];
bool Intra[MAXN];
int now;
void DFS (int nod)
{
St[++ now] = nod;
if (V[nod])
Sol[nod] = Sol[St[now - V[nod]]] + 1;
for (auto it = Graf[nod].begin (); it != Graf[nod].end (); ++ it)
DFS (*it);
-- now;
}
int main()
{
int N, a, b, i;
in >> N;
for (i = 1; i <= N; i ++)
in >> V[i];
for (i = 1; i < N; i ++){
in >> a >> b;
Intra[b] = 1;
Graf[a].push_back (b);
}
for (i = 1; i <= N; i ++)
if (!Intra[i])
break;
DFS (i);
for (i = 1; i <= N; i ++)
out << Sol[i] << " ";
return 0;
}