Pagini recente » Cod sursa (job #669767) | Cod sursa (job #2680828) | Cod sursa (job #1897803) | Cod sursa (job #1370886) | Cod sursa (job #2046800)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
const int N=100001;
vector <int> a[N];
int n,v[N],nr,m,rez,tata[N],q[N],sol[N];
bool viz[N];
void citire()
{
int x,y,i;
in>>n;
for(i=1; i<=n; i++)
in>>v[i];
for(i=1; i<n; i++)
{
in>>x>>y;
a[x].push_back(y);
tata[y]=1;
}
in.close();
}
void dfs(int nod)
{
int y;
q[++nr]=nod;
if(v[nod])
sol[nod]=sol[q[nr-v[nod]]]+1;
for(size_t i=0; i<a[nod].size(); i++)
{
y=a[nod][i];
dfs(y);
}
--nr;
}
int main()
{
citire();
int i;
for(i=1; i<=n && tata[i]; i++);
dfs(i);
for(i=1; i<=n; i++)
out<<sol[i]<<" ";
return 0;
}