Pagini recente » Cod sursa (job #1229774) | Cod sursa (job #71608) | Cod sursa (job #3124298) | Cod sursa (job #1356282) | Cod sursa (job #1942205)
#include <iostream>
#include <fstream>
#define N 100005
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
int n, v[N], tree[N], r[N];
int ancestor(int x, int k){
for(int i=1; i<=k; i++)x=tree[x];
return x;
}
int main(){
in>>n;
int x, y;
for(int i=1; i<=n; i++)in>>v[i],r[i]=-1;
for(int i=1; i<=n; i++){
in>>x>>y;
tree[y]=x;
}
int node, vn;
bool z;
for(int i=1; i<=n; i++){
node=i, vn=0;
z=false;
while(v[node]!=0){
node=ancestor(node, v[node]);
vn++;
if(r[node]!=-1){
z=true;
r[i]=r[node]+vn;
break;
}
}
if(!z)r[i]=vn;
}
for(int i=1; i<=n; i++)out<<r[i]<<" ";
return 0;
}