Cod sursa(job #1135243)

Utilizator dragangabrielDragan Andrei Gabriel dragangabriel Data 7 martie 2014 15:51:23
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#define nmax 100005
using namespace std;

int n,i,j,k,stramos[nmax],sol[nmax],x,y,stiva[nmax],top;
bool tata[nmax];
vector<int>v[nmax];

void df(int x)
{
    tata[x]=true;
    stiva[++top]=x;
    if (stramos[x]) sol[x]=sol[stiva[top-stramos[x]]]+1;
    for (int j=0;j<v[x].size();j++)
        df(v[x][j]);
    --top;
}

int main()
{
    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);
    scanf("%d",&n);
    for (i=1;i<=n;i++)
        scanf("%d",&stramos[i]);
    for (i=1;i<=n-1;i++)
    {
        scanf("%d %d",&x,&y);
        tata[y]=true;
        v[x].push_back(y);
    }
    for (i=1;i<=n;i++)
        if (!tata[i])
            df(i);
    for (i=1;i<=n;i++)
        printf("%d ",sol[i]);
    return 0;
}