Pagini recente » Cod sursa (job #2401981) | Cod sursa (job #952944) | Cod sursa (job #1776041) | Cod sursa (job #1057768) | Cod sursa (job #1781173)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
#define MaxN 100001
#define pb push_back
int n, root = 1, top, x, y;
int k[MaxN], t[MaxN], _stack[MaxN], nr[MaxN];
vector<int> G[MaxN];
void Df(int, int);
int main()
{
fin >> n;
for ( int i = 1; i <= n; ++i )
fin >> k[i];
while( fin >> x >> y ) {
G[x].pb(y);
t[y] = x;
}
while(t[root] != 0)
root = t[root];
Df(root, 0);
for ( int i = 1; i <= n; ++i )
fout << nr[i] << ' ';
fin.close();
fout.close();
return 0;
}
void Df(int nod, int lvl) {
_stack[top++] = nod;
if ( k[nod] )
nr[nod] = nr[_stack[lvl-k[nod]]] + 1;
else
nr[nod] = 0;
for ( auto i : G[nod] )
Df(i, lvl + 1);
top--;
}