Pagini recente » Cod sursa (job #1029909) | Cod sursa (job #1570176) | Cod sursa (job #1394557) | Cod sursa (job #1510326) | Cod sursa (job #2147405)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
int n, nr[100100], dp[100100], pv[100100], x, y;
int dfs(int nod, int lvl){
if(dp[nod] != -1 && lvl == 0)
return 1 + dp[nod];
if(lvl == 0 && dp[nod] == -1)
return 1 + (dp[nod] = dfs(nod, nr[nod]));
else return dfs(pv[nod], lvl - 1);
}
int main(){
memset(dp, -1, sizeof dp);
in >> n;
for(int i = 1; i <= n; i++){
in >> nr[i];
if(!nr[i])
dp[i] = 0;
}
while(in >> x >> y)
pv[y] = x;
for(int i = 1; i <= n; i++)
if(nr[i])
dp[i] = dfs(i, nr[i]);
for(int i = 1; i <= n; i++)
out << dp[i] << ' ';
return 0;
}