Submission #1224599

#TimeUsernameProblemLanguageResultExecution timeMemory
1224599SpyrosAlivInside information (BOI21_servers)C++20
12 / 100
3592 ms5344 KiB
#include <bits/stdc++.h> using namespace std; const int MN = 120005; const int MQ = 120005; int n, q; vector<vector<int>> tree(MN); vector<int> par(MN, 0), idx(MN, 0); vector<int> find_seq(int u, int targ) { vector<int> seq; int lst = idx[u]; int curr = u; while (true) { if (curr == targ) return seq; if (par[curr] == 0) { return {-1}; } seq.push_back(idx[curr]); lst = idx[curr]; curr = par[curr]; } return seq; } int get_lca(int u, int v) { while (u != v) { if (u < v) swap(u, v); if (par[u] == 0) return -1; u = par[u]; } return u; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> q; for (int qq = 1; qq <= n + q - 1; qq++) { char s; cin >> s; if (s == 'Q') { int u, v; cin >> u >> v; int lca = get_lca(u, v); if (lca == -1) { cout << "no\n"; continue; } vector<int> seqa = find_seq(u, lca); vector<int> seqb = find_seq(v, lca); bool f = true; for (int i = 1; i < (int)seqb.size(); i++) { if (seqb[i] < seqb[i-1]) { f = false; break; } } for (int i = 1; i < (int)seqa.size(); i++) { if (seqa[i] > seqa[i-1]) { f = false; break; } } if (lca == u || lca == v) { if (f) cout << "yes\n"; else cout << "no\n"; continue; } if (seqb.back() > seqa.back()) f = false; if (f) cout << "yes\n"; else cout << "no\n"; } else if (s == 'S') { int a, b; cin >> a >> b; if (a > b) swap(a, b); idx[b] = qq; par[b] = a; } else assert(false); } }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...