Cod sursa(job #2135739)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 19 februarie 2018 10:09:40
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <vector>
#define DIM 100002

using namespace std;

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

int n, stramos[DIM], s, x, y, t[DIM], rad, sol[DIM];

vector<int> arb[DIM], st;

void dfs(int nod, int niv){
    st.push_back(nod);
    if(stramos[nod] == 0)
        sol[nod] = 0;
    else{
        sol[nod] = sol[st[st.size() - stramos[nod] - 1]] + 1;
    }
    for(int i = 0; i < arb[nod].size(); ++ i){
        int nodc = arb[nod][i];
        dfs(nodc, niv + 1);
    }
    st.pop_back();
}

int main(int argc, const char * argv[]) {
    in>>n;
    st.push_back(0);
    for(int i = 1; i <= n; ++ i)
        in>>stramos[i];
    for(int i = 1; i < n; ++ i){
        in>>x>>y;
        t[y] = x;
        arb[x].push_back(y);
    }
    for(int i = 1; i <= n; ++ i)
        if(t[i] == 0){
            rad = i;
            break;
        }
    dfs(rad, 1);
    for(int i = 1; i <= n; ++ i)
        out<<sol[i]<<" ";
    return 0;
}