Submission #1152833

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

vector<ll> results;

ll dfs(ll v, ll parent, vector<set<ll>>& adj, vector<vector<ll>>& volunteers) {
    if(results[v] != -1) return results[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 results[v] = lastFall;
}

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
    results.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 maxAns = 0;

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

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

        maxAns = max(maxAns, ans);
    }

    results.clear();

    return maxAns;
}
#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...