Cod sursa(job #274488)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 9 martie 2009 19:57:45
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#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;
}