Cod sursa(job #2290443)

Utilizator Tudor27Tudor Iacob Tudor27 Data 26 noiembrie 2018 15:28:40
Problema Cerere Scor 35
Compilator cpp-32 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

ifstream fin("cerere.in");
ofstream fout("cerere.out");

vector <int> v[100003];
int n;
int r[100003];
int g[100003];
int t[100003];
int dr[100003];

void dfs(int m,int pas){
    //cout<<m<<" ";
    dr[pas]=m;
    if(r[m]!=0){
        g[m]=g[dr[pas-r[m]]]+1;
    }
    for(int i=0;i<v[m].size();i++){
        dfs(v[m][i],pas+1);
    }
}

int main()
{
    int x,y;
    fin>>n;
    for(int i=1;i<=n;i++){
        fin>>r[i];
    }
    for(int i=1;i<=n-1;i++){
        fin>>x>>y;
        t[y]=x;
        v[x].push_back(y);
    }

    for(int i=1;i<=n;i++){
        if(t[i]==0){
            dfs(i,0);
            for(int ii=1;ii<=n;ii++){
                fout<<g[ii]<<" ";
            }
            return 0;
        }
    }

    return 0;
}