Pagini recente » Cod sursa (job #39120) | Cod sursa (job #2449304) | Cod sursa (job #2373361) | Cod sursa (job #650975) | Cod sursa (job #681978)
Cod sursa(job #681978)
#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], S;
void dfs (int nod)
{
S.PB (nod);
for (unsigned int i = 0; i < lista[nod].size(); ++ i)
{
int nod2 = lista[nod][i];
if (! K[nod2])
{
dfs (nod2);
continue;
}
sol[nod2] = sol[S[S.size() - K[nod2]]] + 1;
dfs (nod2);
}
S.pop_back ();
}
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 = 0;
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;
}