Pagini recente » Cod sursa (job #1407249) | Cod sursa (job #3121783) | Cod sursa (job #2266891) | Cod sursa (job #1014593) | Cod sursa (job #681966)
Cod sursa(job #681966)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
#define maxN 100005
#define PB push_back
int sol[maxN], tata[maxN], K[maxN];
vector <int> lista[maxN];
void solve (int nod)
{
int k = K[nod];
int nod2 = nod;
if (! k) return;
while (k)
{
nod2 = tata[nod2];
-- k;
}
sol[nod] = sol[nod2] + 1;
}
void dfs (int nod)
{
for (unsigned int i = 0; i < lista[nod].size(); ++ i)
{
solve (lista[nod][i]);
dfs (lista[nod][i]);
}
}
int main()
{
ifstream f ("cerere.in");
ofstream g ("cerere.out");
int N;
f >> N;
for (int i = 1; i <= N; ++ i) f >> K[i];
for (int i = 1, a, b; i < N; ++ i)
{
f >> a >> b;
tata[b] = a;
lista[a].PB (b);
}
int nods;
for (int i = 1; i <= N; ++ i)
if (! tata[i])
{
nods = i;
break;
}
dfs (nods);
for (int i = 1; i <= N; ++ i) g << sol[i] << " ";
return 0;
}