#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |