Submission #1334478

#TimeUsernameProblemLanguageResultExecution timeMemory
1334478x93bd09월 (APIO24_september)C++20
0 / 100
1 ms580 KiB
#include "september.h"

#include <functional>
#include <vector>
#include <set>
#include <map>
using namespace std;

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
  vector<vector<int>> C(N);
  for (int x = 1; x < N; x++)
    C[F[x]].push_back(x);

  int CC[N];
  for (int x = 0; x < N; x++)
    CC[x] = C[x].size();

  set<int> removed, toberemoved;

  function<void(int)> dfs = [&](int n) {
    for (int c: C[n]) {
      if (toberemoved.count(c) || removed.count(c)) continue;
      toberemoved.insert(c);
      dfs(c);
    }
  };

  int K = 0;
  int badfllstate = 0;
  map<int, int> FLL;
  for (int i = 0; i < N - 1; i++) {
    // printf("===\n");
    // for (int x: removed)
    //   printf("%d ", x);
    // printf("\n");
    // for (int x: toberemoved)
    //   printf("%d ", x);
    // printf("\n");

    for (int x = 0; x < M; x++) {
      if (!FLL[S[x][i]]) {
        badfllstate++;

        int n = S[x][i];
        toberemoved.insert(n);
        while (F[n] != -1 && toberemoved.count(n)) {
          CC[F[n]]--;
          toberemoved.erase(n);
          removed.insert(n);

          if (!CC[F[n]])
            n = F[n];
          else
            break;
        }

        dfs(S[x][i]);
      }

      FLL[S[x][i]]++;
      if (FLL[S[x][i]] == M) badfllstate--;
    }

    if (!badfllstate && toberemoved.empty()) {
      K++;
    }
  }

  return K;
}
#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...