Cod sursa(job #2822826)

Utilizator lolismekAlex Jerpelea lolismek Data 25 decembrie 2021 18:54:17
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>

using namespace std;

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

const int N = 1e5 + 1;
vector <int> adj[N], ramura;
int v[N], rasp[N];
bitset <N> viz;

void dfs(int nod){
    viz[nod] = 1;
    ramura.push_back(nod);
    for(auto vec : adj[nod]){
        if(!viz[vec]){			
            if(v[vec] == 0)	rasp[vec] = 0;
            else rasp[vec] = rasp[ramura[ramura.size() - v[vec]]] + 1;
            dfs(vec);
            ramura.pop_back();
        }
    }
}

int main(){
    int n;
    fin >> n;
    for(int i = 1; i <= n; i++) fin >> v[i];
    for(int i = 1; i < n; i++){
        int a, b;
        fin >> a >> b;
        viz[b] = 1;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }

    int sursa = 1;
    for(int i = 1; i <= n; i++){
        if(!viz[i]){
            sursa = i;
            break;
        }
    }
    viz.reset();
    dfs(sursa);
    for(int i = 1; i <= n; i++) fout << rasp[i] << " ";
    return 0;
}