제출 #1200790

#제출 시각아이디문제언어결과실행 시간메모리
1200790crispxx9월 (APIO24_september)C++20
0 / 100
1 ms324 KiB
#include "september.h" #include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define pb push_back #define ar array #define nl '\n' // #include "stub.cpp" using lint = __int128; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); #define rnd(l, r) uniform_int_distribution<lint>(l, r)(rng) int solve(int n, int m, std::vector<int> f, std::vector<std::vector<int>> s) { vector<vector<int>> adj(n); vector<int> tin(n), tout(n); int timer = 0; auto dfs = [&](auto &&self, int v) -> void { tin[v] = ++timer; for(auto to : adj[v]) { self(self, to); } tout[v] = timer; }; dfs(dfs, 0); set<pair<int, int>> st; for(int i = 1; i < n; i++) { st.emplace(tin[i], i); } vector<int> mx(n); for(int i = 0; i < m; i++) { for(int j = 0; j < n - 1; j++) { int v = s[i][j]; mx[v] = max(mx[v], j); } } int j = 0, k = 0; auto update = [&](int u) { vector<int> del; for(auto it = st.lower_bound({tin[u], 0}); it != st.end(); it++) { int v = it -> second; if(!(tin[v] >= tin[u] && tout[v] <= tout[u])) break; k = max(k, mx[v]); del.pb(v); } for(auto &x : del) { st.erase({tin[x], x}); } }; auto add = [&]() { for(int i = 0; i < m; i++) { update(s[i][j]); } j++; }; int ans = 0; while(j < n - 1) { do { add(); } while(j <= k); 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...