Pagini recente » Cod sursa (job #3199474) | Cod sursa (job #1940823) | Cod sursa (job #711770) | Cod sursa (job #421381) | Cod sursa (job #274532)
Cod sursa(job #274532)
#include <cstdio>
#include <vector>
#define vv 100003
using namespace std;
int n,a[vv],k[vv],r,w[vv],m;
vector <int> v[vv],e;
void citire()
{
int x,y;
freopen("cerere.in","r",stdin);
scanf("%d", &n);
for (int i=1; i<=n; i++)
scanf("%d", &k[i]);
for (int i=1; i<=n; i++)
{
scanf("%d%d", &x, &y);
a[y]=x;
v[x].push_back(y);
}
}
void informatie(int l)
{
for (vector <int> :: iterator it=v[l].begin(); it!=v[l].end(); it++)
{
if (!k[*it])
w[*it]=0;
else
{
w[*it]=w[e[m-k[*it]]]+1;
}
e.push_back(*it);
++m;
informatie(*it);
e.pop_back();
--m;
}
}
int main()
{
//freopen("cerere.out","w",stdout);
citire();
for (int i=1; i<=n; i++)
if (a[i]==0)
{
r=i;
break;
}
m=1;
e.push_back(r);
informatie(r);
for (int i=1; i<=n; i++)
printf("%d ",w[i]);
printf("\n");
return 0;
}