Submission #517800

#TimeUsernameProblemLanguageResultExecution timeMemory
517800bebecanvasExperimental Charges (NOI19_charges)C++14
32 / 100
75 ms6892 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define endl '\n' int p[1000005]; int h[1000005]; void reset(int N){ for(int i=0; i<=N; i++){ p[i]=i; h[i]=1; } } int findSet(int u){ if(u==p[u]){return u;} else{ p[u]= findSet(p[u]); return p[u]; } } void unionSet(int a, int b){ int A= findSet(a); int B= findSet(b); if(A==B){return;} if(h[A]<h[B]){ p[A]=B; }else{ p[B]=A; if(h[A]==h[B]){h[A]++;} } } int p2[1000005]; int h2[1000005]; void reset2(int N){ for(int i=0; i<=N; i++){ p2[i]=i; h2[i]=1; } } int findSet2(int u){ if(u==p2[u]){return u;} else{ p2[u]= findSet2(p2[u]); return p2[u]; } } void unionSet2(int a, int b){ int A= findSet2(a); int B= findSet2(b); if(A==B){return;} if(h2[A]<h2[B]){ p2[A]=B; }else{ p2[B]=A; if(h2[A]==h2[B]){h2[A]++;} } } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n, q; cin >> n >> q; reset(n); reset2(n); map<int, int> m; for(int i=0; i<q; i++){ char a; cin >> a; int b, c; cin >> b >> c; if(a=='R'){unionSet(b, c); unionSet2(b, c);} else if(a=='A'){ unionSet(b, c); int B= findSet2(b); int C= findSet2(c); if(m.count(B)>0){unionSet2(m[B], c);}else{m[B]=C;} if(m.count(C)>0){unionSet2(m[C], b);}else{m[C]=B;} } else{ int bb= findSet(b); int cc= findSet(c); if(bb!=cc){cout<< "?" << endl; continue;} bb= findSet2(b); cc= findSet2(c); if(bb==cc){cout<< "R" << endl;} else{cout<< "A" << endl;} } } }
#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...