제출 #1175538

#제출 시각아이디문제언어결과실행 시간메모리
1175538rafsanamin20209월 (APIO24_september)C++20
100 / 100
158 ms12680 KiB
#include <bits/stdc++.h>

using namespace std;

const int MAX = 1E6;
int maxidx = 0;

vector<vector<int>> idx;
vector<vector<int>> C_List;
vector<bool> visited;

void dfs(int n, int N, int M)
{
  if (visited[n])
  {
    return;
  }

  for (int i = 0; i < idx.size(); i++)
  {
    maxidx = max(maxidx, idx[i][n]);
  }

  for (int i = 0; i < C_List[n].size(); i++)
  {
    dfs(C_List[n][i], N, M);
  }

  visited[n] = true;
}

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S)
{

  int ans = 0;
  maxidx = 0;

  idx = vector<vector<int>>(M, vector<int>(N));
  C_List = vector<vector<int>>(N);
  visited = vector<bool>(N, false);

  for (int i = 1; i < N; i++)
  {
    C_List[F[i]].push_back(i);
  }

  for (int i = 0; i < M; i++)
  {
    for (int j = 0; j < N - 1; j++)
    {
      idx[i][S[i][j]] = j;
    }
  }

  for (int i = 0; i < N - 1; i++)
  {
    for (int j = 0; j < M; j++)
    {
      dfs(S[j][i], N, M);
    }
    if (maxidx == i)
    {
      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...