Pagini recente » Cod sursa (job #1761020) | Cod sursa (job #1892648) | Cod sursa (job #1420528) | Cod sursa (job #1976850) | Cod sursa (job #1760669)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector <int> G[100005];
bool viz[100005];
int a[100005],k[100005],arbore[100005],T[100005];
int n;
void dfs(int poz,int kappa)
{
viz[poz]=1;
if(k[poz]!=0&&kappa-k[poz]>0)
{
a[poz]=arbore[kappa-k[poz]]+1;
arbore[kappa]=a[poz];
}
else
{
a[poz]=0;
arbore[kappa]=0;
}
for(int i=0;i<G[poz].size();i++)
if(viz[G[poz][i]]==0)
dfs(G[poz][i],kappa+1);
}
int main()
{
fin>>n;
int i;
for(i=1;i<=n;i++)
fin>>k[i];
for(i=1;i<n;i++)
{
int c,b;
fin>>c>>b;
G[c].push_back(b);
T[b]=c;
}
for(i=1;i<=n;i++)
if(T[i]==0)
{
dfs(i,1);
break;
}
for(i=1;i<=n;i++)
fout<<a[i]<<" ";
return 0;
}