Pagini recente » Cod sursa (job #79316) | Cod sursa (job #621704) | Cod sursa (job #2239576) | Cod sursa (job #1433322) | Cod sursa (job #274488)
Cod sursa(job #274488)
#include <cstdio>
#include <vector>
#define vv 100003
using namespace std;
int n,a[vv],k[vv],r,w[vv];
vector <int> v[vv];
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);
}
}
int destinatar(int q)
{
int x;
x=k[q];
while (x)
{
q=a[q];
x--;
}
return q;
}
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[destinatar(*it)]+1;
informatie(*it);
}
}
int main()
{
freopen("cerere.out","w",stdout);
citire();
for (int i=1; i<=n; i++)
if (a[i]==0)
{
r=i;
break;
}
informatie(r);
for (int i=1; i<=n; i++)
printf("%d ",w[i]);
printf("\n");
return 0;
}