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...