Pagini recente » Cod sursa (job #365086) | Cod sursa (job #1835084) | Cod sursa (job #753880) | Cod sursa (job #2913439) | Cod sursa (job #2639730)
#include<bits/stdc++.h>
using namespace std;
ifstream ci("cerere.in");
ofstream cou("cerere.out");
vector<int>v[100005];
bool facut[100005];
int dp[100005];
int stramos[100005];
int n;
int Dfs(int nod,int cn,int mers){
if(cn==mers){
if(stramos[nod]==0){
return 1;
}else{
if(dp[nod]!=0){
return dp[nod]+1;
}
return 1+Dfs(nod,0,stramos[nod]);
}
}
for(auto i:v[nod]){
return Dfs(i,cn+1,mers);
}
}
void citire(){
ci>>n;
int a,b;
for(int i=1;i<=n;i++){
ci>>stramos[i];
}
dp[1]=0;
for(int i=1;i<=n;i++){
ci>>a>>b;
v[b].push_back(a);
if(stramos[b]!=0){
dp[b]=Dfs(b,0,stramos[b]);
}
}
}
void rez(){
int i;
for(i=1;i<=n;i++){
cou<<dp[i]<<" ";
}
}
int main()
{
citire();
rez();
return 0;
}