Cod sursa(job #2190844)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 31 martie 2018 20:57:32
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
ifstream in("cerere.in");
ofstream out("cerere.out");
const int NMAX = 100005;
int n,kth[NMAX],sol[NMAX],viz[NMAX],st[NMAX],nr_elem;
vector<int> v[NMAX];

void dfs(int nod){

    st[++nr_elem] = nod;
    if(kth[nod] != 0)
        sol[nod] = sol[st[nr_elem-kth[nod]]] + 1;
    for(auto fiu : v[nod])
        dfs(fiu);
    --nr_elem;
}

int main()
{

    in>>n;
    for(int i = 1 ; i <= n ; ++i)
        in>>kth[i];
    int a,b,r;
    for(int i = 1 ; i < n ; ++i){
        in>>a>>b;
        v[a].push_back(b);
        viz[b] = 1;
    }
    for(int i = 1 ; i <= n ; ++i)
        if(!viz[i])
            r = i;
    for(int i = 1 ; i <= n ; ++i)
        viz[i] = 0;
    dfs(r);
    for(int i = 1 ; i <= n ; ++i)
        out<<sol[i]<<" ";
    return 0;
}