Pagini recente » Cod sursa (job #1002759) | Cod sursa (job #1002598) | Cod sursa (job #3270632) | Cod sursa (job #2998849) | Cod sursa (job #3351158)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("cerere.in");
ofstream cout("cerere.out");
int v[100005];
vector <int> rez;
vector <int> adj[100005];
int dp[100005];
void dfs(int k)
{
if(v[k]>0)
v[k]=rez[rez.size()-v[k]-1];
dp[k]=dp[v[k]]+1;
if(adj[k].size()==0)
{
return;
}
for(auto i:adj[k])
{
rez.push_back(i);
dfs(i);
rez.pop_back();
}
}
int main()
{
int n, x, y;
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>v[i];
}
for(int i=1; i<=n-1; i++)
{
cin>>x>>y;
adj[x].push_back(y);
}
dp[0]=-1;
rez.push_back(1);
dfs(1);
for(int i=1; i<=n; i++)
{
cout<<dp[i]<<" ";
}
return 0;
}