Cod sursa(job #3129512)

Utilizator PVDoriginalPopescu Vladut Daniel PVDoriginal Data 14 mai 2023 20:35:02
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<bits/stdc++.h>
using namespace std;

    #define ll long long

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

    int n;
    vector<vector<int>> G;
    vector<int> k;
    vector<int> ans;

    unordered_map<int, int> mp;

    void GetAns(int s, int t){

        mp[t] = s;

        /*cout << s+1 << "\n";
        for(const auto x : v)
            cout << x+1 << " ";
        cout << "\n\n";*/

        ans[s] = 1 + ans[mp[t - k[s]]];

        for(const auto u : G[s])
            GetAns(u, t+1);
    }

    int main(){

        //ios_base::sync_with_stdio(false);
        //cin.tie(NULL);

        fin >> n;
        G.resize(n); k.resize(n); ans.resize(n, -1);

        for(int i = 0; i < n; ++i)
            fin >> k[i];

        vector<bool> isKid(n, false);

        for(int i = 0, a, b; i < n-1; ++i)
            fin >> a >> b, G[a-1].emplace_back(b-1), isKid[b-1] = true;

        //cout << "lol\n";

        int root;
        for(root = 0; isKid[root]; ++root);

        vector<int> v;
        GetAns(root, 0);

        for(const auto x : ans)
            fout << x << " ";
    }