Submission #1196542

#TimeUsernameProblemLanguageResultExecution timeMemory
1196542b00legen9월 (APIO24_september)C++17
100 / 100
144 ms19904 KiB
#include <bits/stdc++.h> using namespace std; const int N_max = 1e5; int l[N_max], r[N_max]; vector<int>g[N_max]; void dfs(int v = 0, int p = -1) { if (p != -1) l[v] = min(l[v], l[p]); for (int i = 0; i < g[v].size(); i++) { int to = g[v][i]; dfs(to, v); r[v] = max(r[v], r[to]); } } int solve(int N, int M, vector<int>F, vector<vector<int> >S) { for (int i = 0; i < N; i++) { l[i] = N; r[i] = 0; } for (int i = 1; i < N; i++) g[F[i]].push_back(i); for (int j = 0; j < M; j++) { for (int i = 0; i < N - 1; i++) { int nm = S[j][i]; l[nm] = min(l[nm], i + 1); r[nm] = max(r[nm], i + 1); } } dfs(); int res = 0; vector<pair<int, int>>line(N - 1); for (int i = 1; i < N; i++) line[i - 1] = {l[i], r[i]}; sort(line.begin(), line.end()); int cur = 0; for (int i = 0; i < N - 1; i++) { if (line[i].first > cur) res++; cur = max(cur, line[i].second); } for (int i = 0; i < N; i++) g[i].clear(); return res; }
#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...