Submission #1212829

#TimeUsernameProblemLanguageResultExecution timeMemory
1212829k1r1t0September (APIO24_september)C++20
100 / 100
101 ms15040 KiB
#include <bits/stdc++.h> using namespace std; const int N = 110000; vector<int> g[N]; int pos[N], p[N], k[N]; void dfs(int v, int t = (int)(1e9)) { if (v != 0) { t = min(t, pos[v]); p[t]++; p[pos[v]]--; } for (int u : g[v]) dfs(u, t); } int solve(int n, int m, vector<int> f, vector<vector<int>> s) { for (int i = 0; i < n; i++) { p[i] = 0; g[i].clear(); } for (int i = 1; i <= n - 1; i++) g[f[i]].push_back(i); for (int i = 0; i < m; i++) { pos[0] = (int)(1e9); for (int j = 0; j + 1 < n; j++) pos[s[i][j]] = j; dfs(0); } for (int i = 1; i < n; i++) p[i] += p[i - 1]; for (int i = 0; i < n; i++) k[i] = 0; int ans = 0, cnt0 = n, cntm = 0; for (int i = 0; i + 1 < n; i++) { for (int j = 0; j < m; j++) { k[s[j][i]]++; if (k[s[j][i]] == 1) cnt0--; if (k[s[j][i]] == m) cntm++; } if (cnt0 + cntm == n && p[i] == 0) 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...