Cod sursa(job #2151666)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 4 martie 2018 18:48:06
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 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;
    long long rad;
    fscanf (fin,"%d",&n);
    for (i=1;i<=n;i++)
        fscanf (fin,"%d",&k[i]);
    rad=(long long)n*(n+1)/2;
    for (i=1;i<=n-1;i++){
        fscanf (fin,"%d%d",&x,&y);
        v[x].push_back(y);
        rad-=y;
    }
    dfs (rad);
    for (i=1;i<=n;i++)
        fprintf (fout,"%d ",calcul (i));
    return 0;
}