Submission #1178953

#TimeUsernameProblemLanguageResultExecution timeMemory
1178953JelalTkmSeptember (APIO24_september)C++20
0 / 100
1095 ms320 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;
    int cnt1 = 0;
    while (ok) {
      ok = 0;
      int mx = 0;
      for (int i = 0; i < m; i++) {
        ind[i] = pref[i][ind[i]];
        mx = max(mx, ind[i]);
      }
      for (int i = 0; i < m; i++) {
        for (int j = ind[i]; j <= mx; j++)
          mp[s[i][j]] = 1;
        ind[i] = mx;
      }
      if (ind[0] + 1 != (int) mp.size()) {
        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(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...