Submission #1244513

#TimeUsernameProblemLanguageResultExecution timeMemory
1244513faruk9월 (APIO24_september)C++20
100 / 100
89 ms9792 KiB
#include "september.h" #include <bits/stdc++.h> using namespace std; int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) { vector<vector<int> > pref_sizes(M, vector<int>(N - 1)); vector<vector<int> > wher_is(M, vector<int>(N)); for (int i = 0; i < M; i++) { for (int j = 0; j < N - 1; j++) wher_is[i][S[i][j]] = j; } vector<bool> is_same(N); for (int i = 0; i < N - 1; i++) { int max_val = i; for (int j = 0; j < M; j++) { pref_sizes[j][i] = wher_is[j][S[0][i]]; if (i > 0) pref_sizes[j][i] = max(pref_sizes[j][i], pref_sizes[j][i - 1]); max_val = max(max_val, pref_sizes[j][i]); } if (max_val == i) is_same[i] = true; } vector<int> indeg(N, 0); vector<bool> tbd(N); for (int i = 1; i < N; i++) indeg[F[i]]++; int tbd_cnt = 0; int out = 0; for (int i = 0; i < N - 1; i++) { int me = S[0][i]; tbd[me] = true; tbd_cnt++; while (indeg[me] == 0 and tbd[me]) { tbd[me] = false; tbd_cnt--; me = F[me]; indeg[me]--; } if (tbd_cnt == 0 and is_same[i]) out++; } return out; }
#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...