Cod sursa(job #2781510)

Utilizator Tudor_PascaTudor Pasca Tudor_Pasca Data 9 octombrie 2021 18:11:10
Problema Cerere Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

int n, lantLun, r;
int stramos[100100], ans[100100], lant[100100];
bool fr[100100];
vector<int> adj[100100];

void dfs(int node, int father)
{
    lant[++lantLun] = node;

    if(stramos[node] != 0)
    {
        int indStramos = lantLun - stramos[node];
        int str = lant[indStramos];
        ans[node] = ans[str] + 1;
    }

    for(auto it: adj[node])
        dfs(it, node);

    lantLun--;
}

int main()
{
    in >> n;

    for(int i = 1; i <= n; ++i)
        in >> stramos[i];

    for(int i = 1; i < n; ++i)
    {
        int x, y;
        in >> x >> y;
        adj[x].push_back(y);
        fr[y] = 1;
    }

    for(int i = 1; i <= n && r == 0; ++i)
        if(fr[i] == 0)
            r = i;

    dfs(r, 0);

    for(int i = 1; i <= n; ++i)
        out << ans[i] << ' ';

    out << '\n';

    return 0;
}