Pagini recente » Cod sursa (job #2645225) | Cod sursa (job #469459) | Cod sursa (job #2498760) | Cod sursa (job #774510) | Cod sursa (job #2781642)
#include <iostream>
#include <fstream>
#include <vector>
#define maxi 100005
using namespace std;
ifstream f;
ofstream g;
vector<int> V[maxi];
bool viz[maxi];
int D[maxi],nod[maxi],ancestor[maxi],n,a,b,tata[maxi],root;
void READ()
{
f>>n;
for(int i=1;i<=n;i++)
f>>ancestor[i];
for(int i=1;i<=n-1;i++)
{
f>>a>>b;
tata[b]=a;
V[a].push_back(b);
}
return;
}
void DFS(int x,int lvl)
{
viz[x]=true;
nod[lvl]=x;
if(ancestor[x])
D[x]=D[nod[lvl-ancestor[x]]]+1;
for(auto a:V[x])
if(!viz[a])
DFS(a,lvl+1);
}
int main()
{
f.open("cerere.in",ios::in);
g.open("cerere.out",ios::out);
READ();
for(int i=1;i<=n;i++)
if(!tata[i])
{
root=i;
break;
}
DFS(root,0);
for(int i=1;i<=n;i++)
g<<D[i]<<" ";
f.close();
g.close();
return 0;
}