Pagini recente » Cod sursa (job #1410754) | Cod sursa (job #915742) | Cod sursa (job #617151) | Cod sursa (job #2430641) | Cod sursa (job #1758041)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector <int> G[100005];
bool viz[100005];
int stramos[100004],a[100005];
int n;
int k[100005];
void dfs(int poz,int p)
{
viz[poz]=1;
if(stramos[poz]==0)
k[p]=0;
else
k[p]=k[p-stramos[poz]]+1;
a[poz]=k[p];
for(int i=0;i<G[poz].size();i++)
if(viz[G[poz][i]]==0)
dfs(G[poz][i],p+1);
}
int main()
{
fin>>n;
int i;
for(i=1;i<=n;i++)
fin>>stramos[i];
for(i=1;i<n;i++)
{
int c,b;
fin>>c>>b;
G[c].push_back(b);
}
dfs(1,1);
for(i=1;i<=n;i++)
fout<<a[i]<<" ";
return 0;
}