Cod sursa(job #3327970)

Utilizator boboc132Boboc Teodor boboc132 Data 5 decembrie 2025 18:41:31
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

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

//dp[vecin]=stramos[niv-V[nod]]

void dfs(int nod,int niv,const vector<vector<int>>&graf,const vector<int>&V,vector<bool>&vizitat,vector<int>&dp,vector<int>&stramos){
    vizitat[nod]=true;
    stramos[niv]=nod;
    if(V[nod]==0){
        dp[nod]=0;
    }else{
        dp[nod]=dp[stramos[niv-V[nod]]]+1;
    }   
    for(int vecin:graf[nod]){
        if(!vizitat[vecin]){
            dfs(vecin,niv+1,graf,V,vizitat,dp,stramos);
        }
    }   
}

/* stramos  noduri
    1       nod 2
    2       nod 6
    3       nod 9
    4       nod 10
    5       nod 11 duce e legat de 2

    dp[vecin]=stramos[niv-V[nod]];
    
    nr de pasi=sol
    sol[i]=dp[stramos[niv-V[i]]]+1;
*/

int main(){
    int n;
    in>>n;
    vector<int>V(n+1);
    vector<vector<int>>graf(n+1);
    vector<bool>vizitat(n+1,false);
    vector<int>dp(n+1,0);
    vector<int>stramos(n+1);
    vector<int>sol(n+1);
    int x,y;
    for(int i=1;i<=n;i++){
        in>>V[i];
    }
    for(int i=1;i<n;i++){
        in>>x>>y;
        graf[x].push_back(y);
        graf[y].push_back(x);
    }
    dfs(1,1,graf,V,vizitat,dp,stramos);
    for(int i=1;i<=n;i++){
        out<<dp[i]<<" ";
    }
}