Cod sursa(job #1518692)

Utilizator robx12lnLinca Robert robx12ln Data 6 noiembrie 2015 08:47:35
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<cstdio>
#define DIM 100005
#include<vector>
using namespace std;
int d[DIM],s[DIM],K[DIM],T[DIM],n;
vector<int> L[DIM];
void dfs(int nod,int niv){
    s[niv] = nod;
    if(K[nod]==0){
        d[nod] = 0;
    }else{
        d[nod] = 1 + d[ s[niv - K[nod] ] ];
    }
    for(int i = 0; i < L[nod].size(); i++){
        int vecin = L[nod][i];
        dfs(vecin,niv+1);
    }
    return ;
}
int x,y;
int main(){

    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);

    scanf("%d",&n);
    for(int i=1 ; i<=n ; i++){
        scanf("%d",&K[i]);
    }
    for(int i=1 ; i<=n ; i++){
        scanf("%d%d",&x,&y);
        L[x].push_back(y);
        T[y]=x;
    }
    for(int i = 1; i <= n; i++){
        if( T[i] == 0 ){
            dfs(i,1);
            break;
        }
    }
    for(int i = 1; i <= n; i++){
        printf("%d ",d[i]);
    }
    return 0;
}
// L(ea)RN
// M