제출 #1179156

#제출 시각아이디문제언어결과실행 시간메모리
1179156JelalTkm9월 (APIO24_september)C++20
100 / 100
356 ms32208 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 + 1, vector<int> (n + 1)); 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((j > 0 ? pref[i][j - 1] : 0), dp[i][s[i][j]]); } } map<int, int> mp; int ans = 0; vector<int> ind(m, -1); while (true) { for (int i = 0; i < m; i++) ind[i]++; ans++; if (ind[0] == (n - 1)) { ans--; break; } bool ok = 1; while (ok) { ok = 0; int mx = 0; for (int i = 0; i < m; i++) { mx = max(mx, pref[i][ind[i]]); } for (int i = 0; i < m; i++) { if (pref[i][mx] != mx) ok = 1; } for (int i = 0; i < m; i++) { for (int j = ind[i]; j <= mx; j++) { mp[s[i][j]] = 1; } ind[i] = mx; } if ((int) mp.size() != (ind[0] + 1) || ok) { for (int i = 0; i < m; i++) ind[i]++; ok = 1; } } } 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--) { // int n, m; // cin >> n >> m; // vector<int> f(n); // f[0] = -1; // for (int i = 1; i < n; i++) // cin >> f[i]; // vector<vector<int>> s(m, vector<int> (n - 1)); // for (int i = 0; i < m; i++) { // for (int j = 0; j < (n - 1); j++) // cin >> s[i][j]; // } // cout << solve(n, m, f, s) << '\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...