Pagini recente » Cod sursa (job #3146949) | Cod sursa (job #670101) | Cod sursa (job #2301251) | Cod sursa (job #25222) | Cod sursa (job #902759)
Cod sursa(job #902759)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector<int>g[100001];
int k[100001], t[100001], sol[100001], arb[100001], n, x, y, nr;
void Solve( int nod, int lv )
{
arb[lv]=nod;
if ( !k[nod] )
sol[nod]=1;
else sol[nod] = 1+ sol[arb[lv-k[nod]]];
for ( vector<int>::iterator it=g[nod].begin(); it<g[nod].end();it++)
Solve(*it,lv+1);
}
int main()
{
fin >> n;
while ( n-- )
fin>>k[++nr];
while ( fin>>x>>y )
g[x].push_back(y),t[y]=x;
while ( t[x] )
x = t[x];
Solve(x,1);
for ( int i = 1; i <= nr; i++ )
fout<<sol[i]-1<<' ';
fin.close();
fout.close();
return 0;
}