Pagini recente » Istoria paginii runda/preoji2020 | Cod sursa (job #1681132) | Istoria paginii runda/cei_mai_mari_olimpicari_runda_3 | Cod sursa (job #1872389) | Cod sursa (job #1830554)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
const int N = 100003;
int n, nr, lst[N], vf[N], urm[N], k[N], rasp[N], pred[N],pr;
bool viz[N], radacina[N];
void adauga( int x, int y )
{
nr++;
vf[nr] = y;
urm[nr] = lst[x];
lst[x] = nr;
}
void raspuns( int x )
{
int p, y;
viz[x] = true;
pred[++pr] = x;
if ( k[x] == 0 )
rasp[x] = 0;
else
{
rasp[x] = 1+ rasp[ pred[ pr-k[x]] ];
}
p = lst[x];
while( p!= 0 )
{
y = vf[p];
if ( viz[y] == false )
{
raspuns(y);
//pr--;
}
p = urm[p];
}
pr--;
}
int main()
{
in >> n;
int i, x, y, r;
for ( i = 1; i <= n; i++ )
in >> k[i];
for ( i = 1; i < n; i++ )
{
in >> x >> y;
adauga(x,y);
radacina[y] = true;
}
for ( i = 1; i <= n; i++ )
if ( radacina[i] == false )
{
r = i;
continue;
}
raspuns(r);
for ( i = 1; i <= n; i++ )
out << rasp[i]<<' ';
return 0;
}