Submission #1152816

#TimeUsernameProblemLanguageResultExecution timeMemory
1152816burgerguySeptember (APIO24_september)C++20
0 / 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); vector<ll> ordered(N - 1); for (int i = 0; i < S[0].size(); ++i) { ordered[i] = memo[S[0][i]]; } ll ans = 0, curFall = -1; for (int i = 0; i < ordered.size(); ++i) { if(curFall < ordered[i]) { ++ans; curFall = ordered[i]; } } return ans; }
#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...