Submission #1178903

#TimeUsernameProblemLanguageResultExecution timeMemory
1178903JelalTkmSeptember (APIO24_september)C++20
11 / 100
1 ms584 KiB
#include <bits/stdc++.h> #include "september.h" #pragma GCC optimize ("O3") #pragma GCC target ("sse4") using namespace std; // #define int long long int // const int N = 2e5 + 10; // const int md = 1e9 + 7; // const int INF = 1e18; int solve(int n, int m, vector<int> f, vector<vector<int>> s) { vector<vector<int>> num(m + 1, vector<int> (n)); for (int i = 0; i < m; i++) { for (int j = 0; j < (n - 1); j++) { num[i][s[i][j]] = j; } } vector<vector<int>> g(n + 1, vector<int> ()); for (int i = 1; i < n; i++) { g[i].push_back(f[i]); g[f[i]].push_back(i); } vector<vector<int>> dp(m, vector<int> (n)); function<void(int, int)> dfs = [&](int u, int p) { for (int i = 0; i < m; i++) dp[i][u] = num[i][u]; for (auto v: g[u]) { if (v != p) { dfs(v, u); for (int i = 0; i < m; i++) dp[i][u] = max(dp[i][u], dp[i][v]); } } }; dfs(0, -1); vector<vector<int>> pref(m + 1, vector<int> (n + 1)); for (int i = 0; i < m; i++) { for (int j = 0; j < (n - 1); j++) { pref[i][j] = max((i > 0 ? pref[i][j - 1] : 0), dp[i][s[i][j]]); } } int ans = 0; vector<int> ind(m, -1); int cnt = 0; while (true) { // cnt++; // if (cnt == 2) // break; for (int i = 0; i < m; i++) ind[i]++; ans++; if (ind[0] == (n - 1)) { ans--; break; } bool ok = 1; while (ok) { ok = 0; for (int i = 0; i < m; i++) { if (pref[i][ind[i]] != ind[i]) ok = 1; ind[i] = pref[i][ind[i]]; } } int mx = 0; for (int i = 0; i < m; i++) mx = max(mx, ind[i]); for (int i = 0; i < m; i++) ind[i] = mx; } return ans; } // int32_t main(int32_t argc, char *argv[]) { // ios::sync_with_stdio(false); // cin.tie(nullptr); // int T = 1; // // cin >> T; // while (T--) { // cout << solve(5, 2, {-1, 0, 0, 1, 1}, {{1, 2, 3, 4}, {4, 1, 2, 3}}) << '\n'; // } // return 0; // }
#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...