Cod sursa(job #2838373)

Utilizator mariusn01Marius Nicoli mariusn01 Data 23 ianuarie 2022 14:58:33
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>
#include <vector>
#define DIM 100001
using namespace std;

int k[DIM];
int t[DIM];
int n,i,r,x,y;
int s[DIM];
int sol[DIM];
vector<int> L[DIM];


void dfs(int nod, int niv){
    s[niv]=nod;
    if (k[nod]==0) {
        sol[nod]=0;
    } else {
        sol[nod]=sol[s[niv-k[nod]]]+1;
    }
    for (int i=0;i<L[nod].size();i++) {
        dfs(L[nod][i], niv+1);
    }
}


int main(){
    FILE *fin = fopen("cerere.in","r");
    fscanf(fin,"%d",&n);
    for (i=1;i<=n;i++)
        fscanf(fin,"%d",&k[i]);
    for (i=1;i<n;i++){
        fscanf(fin,"%d %d",&x,&y);
        L[x].push_back(y);
        t[y] = x;
    }
    for (i=1;i<=n;i++)
        if (t[i]==0) {
            r=i;
            break;
        }
    dfs(r,1);
    FILE *fout = fopen("cerere.out","w");
    for (i=1;i<=n;i++)
        fprintf(fout,"%d ",sol[i]);

    return 0;
}