Pagini recente » Cod sursa (job #3180188) | Cod sursa (job #2664104) | Cod sursa (job #1476280) | Cod sursa (job #2033989) | Cod sursa (job #2636558)
#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;
void citire(){
ci>>n;
int a,b;
for(int i=1;i<=n;i++){
ci>>stramos[i];
}
for(int i=1;i<=n;i++){
ci>>a>>b;
v[b].push_back(a);
}
}
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 rez(){
int i;
for(i=1;i<=n;i++){
if(stramos[i]!=0){
dp[i]=Dfs(i,0,stramos[i]);
}else{
dp[i]=0;
}
cou<<dp[i]<<" ";
}
}
int main()
{
citire();
rez();
return 0;
}