Pagini recente » Cod sursa (job #516668) | Cod sursa (job #1724842) | Cod sursa (job #1654022) | Cod sursa (job #272771) | Cod sursa (job #63005)
Cod sursa(job #63005)
#include <cstdio>
#include <vector>
#include <bitset>
using namespace std;
#define Nmax 100100
#define Hmax 10
#define pow(q) (1<<(q))
int up[Nmax], st[Nmax], nr[Nmax], H = 0;
vector<int> l[Nmax];
bitset<Nmax> poate;
void DF(int nod)
{
st[++H] = nod;
if(poate[nod])
nr[nod] = 0;
else
nr[nod] = nr[st[H-up[nod]]] + 1;
for(int i=0;i<l[nod].size();++i)
DF(l[nod][i]);
--H;
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
int n, i, a,b;
scanf("%d", &n);
for(i=1;i<=n;++i)
{
scanf("%d",up+i);
if(up[i] == 0)
poate[i] = 1;
}
int sef = 0;
for(i=1;i<n;++i)
{
scanf("%d%d",&a,&b);
l[a].push_back(b);
sef^= i^b;
}
DF(sef^n);
for(i=1;i<=n;++i)
printf("%d ", nr[i]);
printf("\n");
return 0;
}