제출 #1178911

#제출 시각아이디문제언어결과실행 시간메모리
1178911JelalTkm9월 (APIO24_september)C++20
45 / 100
165 ms19232 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((j > 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...