Pagini recente » Cod sursa (job #3181577) | Cod sursa (job #2530395) | Cod sursa (job #441080) | Cod sursa (job #1169578) | Cod sursa (job #3004462)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector<int> x[100001], y[100001];
int z[100001], v[100001], p[100001], r;
int F(int nod)
{vector<int>:: iterator I;
for(I=y[nod].begin();I<y[nod].end();I++)
return F(*I);
return nod;
}
void Fill(int nod, int niv)
{p[niv]=nod;
if(z[nod]==0)v[nod]=0;
else v[nod]=1+v[p[niv-z[nod]]];
vector<int>:: iterator I;
for(I=x[nod].begin();I<x[nod].end();I++)
Fill(*I, niv+1);
}
int main()
{ int n, a, b;
fin>>n;
for(int i=1;i<=n;i++)
fin>>z[i];
for(int i=1;i<n;i++)
{fin>>a>>b;
x[a].push_back(b);
y[b].push_back(a);
}
r=F(1);
Fill(r, 1);
for(int i=1;i<=n;i++)
fout<<v[i]<<" ";
return 0;
}