Cod sursa(job #2151651)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 4 martie 2018 18:32:41
Problema Cerere Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <vector>

using namespace std;
vector <int> v[100001];
int k[100001],w[100001],p[100001],sol[100001],f[100001];
void dfs (int nod){
    int i,vecin;
    p[++p[0]]=nod;
    w[nod]=p[p[0]-k[nod]];
    for (i=0;i<v[nod].size();i++){
        vecin=v[nod][i];
        dfs (vecin);
    }
    p[0]--;
}
int calcul (int nod){
    if (sol[nod])
        return sol[nod];
    if (k[nod]==0){
        sol[nod]=0;
        return sol[nod];
    }
    sol[nod]=1+calcul(w[nod]);
    return sol[nod];
}
int main()
{
    FILE *fin=fopen ("cerere.in","r");
    FILE *fout=fopen ("cerere.out","w");
    int n,i,x,y;
    fscanf (fin,"%d",&n);
    for (i=1;i<=n;i++)
        fscanf (fin,"%d",&k[i]);
    for (i=1;i<=n-1;i++){
        fscanf (fin,"%d%d",&x,&y);
        v[x].push_back(y);
        f[y]=1;
    }
    for (i=1;i<=n;i++)
        if (!f[i])
            break;
    dfs (i);
    for (i=1;i<=n;i++){
        fprintf (fout,"%d ",calcul (i));
    }
    return 0;
}