Submission #1251946

#TimeUsernameProblemLanguageResultExecution timeMemory
1251946gry3125Experimental Charges (NOI19_charges)C++20
18 / 100
75 ms1608 KiB
#include <bits/stdc++.h> #define pb push_back #define ll long long int #define all(v) (v).rbegin(),(v).rend() #define fi first #define se second using namespace std; int sz[100005]; pair<int,bool> par[100005]; pair<int,bool> find(int v) { if (par[v].fi == v) return {v, 1}; auto u = find(par[v].fi); if (par[v].se) return {par[v].fi, u.se}; return {par[v].fi, !u.se}; } void merge(int a, int b, bool c) { auto A = find(a), B = find(b); if (A.fi == B.fi) return; if (sz[A.fi] < sz[B.fi]) {swap(a, b); swap(A, B);} sz[A.fi] += sz[B.fi]; par[B.fi].fi = A.fi; if (c == 1) par[B.fi].se = (A.se == B.se); else par[B.fi].se = !(A.se == B.se); } int main() { int n, q; cin >> n >> q; for (int i = 0; i < n; i++) { par[i].fi = i; par[i].se = 1; sz[i] = 1; } while (q--) { char c; cin >> c; int a, b; cin >> a >> b; a--; b--; if (c == 'A') {merge(a, b, 0); continue;} if (c == 'R') {merge(a, b, 1); continue;} auto A = find(a), B = find(b); if (A.fi != B.fi) {cout << "?\n"; continue;} cout << (A.se == B.se ? "R" : "A") << "\n"; } return 0; }
#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...