Submission #1152828

#TimeUsernameProblemLanguageResultExecution timeMemory
1152828burgerguySeptember (APIO24_september)C++20
11 / 100
0 ms580 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

vector<ll> memo;

ll dfs(ll v, ll parent, vector<set<ll>>& adj, vector<vector<ll>>& volunteers) {
    if(memo[v] != -1) return memo[v];

    ll lastFall = -1;
    for (ll i = 0; i < volunteers.size(); i++) {
        lastFall = max(lastFall, volunteers[i][v]);
    }

    for(ll e : adj[v]) {
        if(e != parent) {
            lastFall = max(lastFall, dfs(e, v, adj, volunteers));
        }
    }

    return memo[v] = lastFall;
}

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
    memo.resize(N, -1);

    vector<set<ll>> initialTree(N);
    for (int i = 1; i < F.size(); i++) {
        initialTree[F[i]].insert(i);
    }

    vector<vector<ll>> volunteers(M, vector<ll>(N));
    for (int i = 0; i < S.size(); ++i) {
        for (int j = 0; j < S[i].size(); ++j) {
            volunteers[i][S[i][j]] = j;
        }
    }

    dfs(0, -1, initialTree, volunteers);

    ll minAns = INT_MAX;

    for(vector<int> record : S) {
        vector<ll> ordered(N - 1);
        for (int i = 0; i < record.size(); ++i) {
            ordered[i] = memo[record[i]];
        }

        ll ans = 0, curFall = -1;
        for (int i = 0; i < ordered.size(); ++i) {
            if(curFall < ordered[i]) {
                ++ans;
                curFall = ordered[i];
            }
        }

        minAns = min(minAns, ans);
    }

    memo.clear();

    return minAns;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...