제출 #1201752

#제출 시각아이디문제언어결과실행 시간메모리
1201752noopSeptember (APIO24_september)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h>
using namespace std;
vector<int> g;
vector<bool> s;
vector<int> agunion;
vector<unordered_map<int,int> > u;
int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
  g.resize(N,0);
  s.resize(N,0);
  u.resize(M,{});
  agunion.resize(M,0);
  int ans=0,t=0,c,p;
  bool flag;
  for (int i=1; i<N; i++){
    g[F[i]]++;
  }
  for (int i=0; i<S[0].size(); i++){
    c=S[0][i];
    if (g[c]){
      t++;
      s[c]=1;
    }
    p=F[c];
    g[p]--;
    if (!g[p] and s[p]){
      t--;
      s[p]=0;
    }
    for (int r=0; r<M; r++){
      c=S[r][i];
      if (!u[r][c]){
        agunion[r]++;
      }
      u[r][c]++;
      if (!u[r][c]){
        agunion[r]--;
      }
      for (int j=0; j<r; j++){
        if (!u[j][c]){
          agunion[j]++;
        }
        u[j][c]--;
        if (!u[j][c]){
          agunion[j]--;
        }
      }
      for (int j=r+1; j<M; j++){
        if (!u[j][c]){
          agunion[j]++;
        }
        u[j][c]--;
        if (!u[j][c]){
          agunion[j]--;
        }
      }
    }
    flag=1;
    for (int r=0; r<M; r++){
      if (agunion[r]){
        flag=0;
      }
    }
    if (!t and flag){
      ans++;
    }
  }
  return ans;
}
#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...