Pagini recente » Cod sursa (job #3223808) | Cod sursa (job #1142478) | Cod sursa (job #2385402) | Cod sursa (job #264177) | Cod sursa (job #3289369)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n,x,y,rad,k[100200],nivel[100200],obiect[100200],maimute[100200],ap[100200];
vector <int> edges[100200];
void dfs(int x)
{
obiect[nivel[x]]=x;
maimute[x]=maimute[obiect[nivel[x]-k[x]]]+1;
for(auto y:edges[x])
if(nivel[y]==0)
nivel[y]=nivel[x]+1, dfs(y);
}
int main()
{
f>>n;
for(int i=1; i<=n; i++)
f>>k[i];
for(int i=1; i<=n; i++)
f>>x>>y, edges[x].push_back(y), ap[y]=1;
for(int i=1; i<=n; i++)
if(ap[i]==0)
{rad=i; break;}
nivel[rad]=1, dfs(rad);
for(int i=1; i<=n; i++)
g<<maimute[i]-1<<' ';
return 0;
}