Cod sursa(job #274532)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 9 martie 2009 20:31:26
Problema Cerere Scor 0
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],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;
}