Pagini recente » Cod sursa (job #2945796) | Romanian IOI Medalists: Careers | Cod sursa (job #1893674) | Cod sursa (job #973116) | Cod sursa (job #1053246)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int MAXN = 100011;
int N, v[MAXN], sol[MAXN], niv[MAXN], rad;
vector <int> G[MAXN], Gt[MAXN];
bool used[MAXN], am_tata[MAXN];
void citire()
{
int fiu, tata;
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> v[i];
for (int i = 1; i < N; ++i)
{
fin >> tata >> fiu;
G[tata].push_back(fiu);
am_tata[fiu] = true;
}
for (int i = 1; i <= N; ++i)
if ( !am_tata[i] )
{
rad = i;
break;
}
}
inline void DFS(int nod, int nivel)
{
used[nod] = true;
niv[nivel] = nod;
if ( v[nod] )
sol[nod] = sol[niv[nivel - v[nod]]] + 1;
for (int i = 0; i < G[nod].size(); ++i)
{
int tata = G[nod][i];
if ( !used[tata] )
DFS(tata, nivel+1);
}
}
int main ()
{
citire();
niv[1] = 1;
DFS(rad, 1);
for (int i = 1; i <= N; ++i)
fout << sol[i] << " ";
fin.close();
fout.close();
return 0;
}