Cod sursa(job #2604809)

Utilizator CraniXortDumitrescul Eduard CraniXort Data 23 aprilie 2020 15:55:59
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>

//std::ifstream fin ("input.txt");
//std::ofstream fout ("output.txt");

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

bool ok[100005];
int x[100005], dp[100005];
std::vector < int > edge[100005];
std::vector < int > path;

void DFS (int node){
    if (x[node] == 0)
        dp[node] = 0;
    else
        dp[node] = dp[path[path.size()-x[node]]] + 1;
    path.push_back (node);
    for (int i=0; i<edge[node].size(); i++){
        int next = edge[node][i];
        DFS (next);
    }
    path.pop_back ();
}


int main()
{
    int V, i, src, dest;
    fin >> V;
    for (i=1; i<=V; i++)
        fin >> x[i];

    for (i=1; i<V; i++){
        fin >> src >> dest;
        edge[src].push_back (dest);
        ok[dest] = 1;
    }

    int root = -1;
    for (i=1; i<=V; i++)
        if (ok[i] == 0){
            root = i;
            break;
        }

    DFS (root);

    for (i=1; i<=V; i++)
        fout << dp[i] << ' ';

    return 0;
}