Pagini recente » Cod sursa (job #3282954) | Cod sursa (job #2738632) | Cod sursa (job #2221444) | Clasament fgdgd | Cod sursa (job #3282393)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
const int CT=100001;
int v[CT],/*s[CT],*/d[CT],r[CT];
bool rad[CT];
int n;
vector <int> s[CT];
void sbp(int i,int dr)
{
d[dr]=i;
if(v[i]==0)
r[i]=0;
else
r[i]=r[d[dr-v[i]]]+1;
for(auto j: s[i])
sbp(j,dr+1);
/*
for(int j=1;j<=n;j++)
if(s[j]==i)
sbp(j,dr+1);
*/
}
int main()
{
in>>n;
for(int i=1;i<=n;i++)
in>>v[i];
for(int i=1;i<n;i++)
{
int a,b;
in>>a>>b;
//s[b]=a;
r[i]=-1;
rad[b]=1;
s[a].push_back(b);
}
r[n]=-1;
int l=1;
while(rad[l])
l++;
sbp(l,1);
for(int i=1;i<=n;i++)
out<<r[i]<<' ';
return 0;
}