# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1173079 | thecrazycandy | September (APIO24_september) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
int nw = 1;
vector <int> g[2001];
int tin[2001], tout[2001];
void dfs (int v, int p) {
tin[v] = nw;
for (auto i : g[v]) {
if (i != p) dfs(i, v);
}
tout[v] = nw;
nw++;
}
int solve (int n, int m, vector <int> v, vector <vector <int>> a) {
int cnt = 0;
for (int i = 1; i < n; i++) {
g[v[i]].push_back(i);
}
for (int i = 0; i < n - 1; i++) {
int ind = 0;
int idx = 0, mn = 1e9 + 1, mx = -1;
for (int j = i + 1; j < n - 1; j++) {
if (tin[a[0][i]] <= tin[a[0][j]] && tout[a[0][i]] >= tout[a[0][j]]) {
ind = max(ind, j);
}
}
cnt++;
if (ind == 0) continue;
for (int j = i + 1; j <= ind; j++) {
if (tin[a[0][i]] >= tin[a[0][j]] && tout[a[0][i]] <= tout[a[0][j]] && tin[a[0][j]] <= mn && tout[a[0][j]] >= mx) {
mx = tout[a[0][j]];
mn = tin[a[0][j]];
idx = j;
}
}
if (idx == 0) {
i = ind;
continue;
}
i = idx - 1;
cnt--;
}
for (int i = 0; i < n; i++) g[i].clear();
return cnt;
}
int main () {
cout << solve(3, 1, {-1, 0, 0}, {{1, 2}});
}