Cod sursa(job #472560)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 25 iulie 2010 16:48:28
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
#include<vector>
using namespace std;

vector <int> v[100005];

int n,str[100005],st[100005];
int nr,cer[100005];
int viz[100005];

void dfs(int nod)
{
    int i,vec,lim=v[nod].size();
    if(str[nod])
        cer[nod]=cer[st[nr-str[nod]+1]]+1;
    st[++nr]=nod;
    for(i=0;i<lim;i++)
    {
        vec=v[nod][i];
        dfs(vec);
    }
    nr--;
}

int main ()
{
    int i,a,b;
    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&str[i]);
    for(i=1;i<n;i++)
    {
        scanf("%d%d",&a,&b);
        v[a].push_back(b);
        viz[b]=1;
    }
    for(i=1;i<=n;i++)
        if(!viz[i])
            break;
    dfs(i);
    for(i=1;i<=n;i++)
        printf("%d ",cer[i]);
    printf("\n");
    return 0;
}