Submission #1118355

#TimeUsernameProblemLanguageResultExecution timeMemory
1118355AvianshExperimental Charges (NOI19_charges)C++17
100 / 100
39 ms7096 KiB
#include <bits/stdc++.h> using namespace std; struct dsu{ vector<int>root; vector<int>siz; dsu(int n){ root=vector<int>(n); iota(root.begin(),root.end(),0); siz=vector<int>(n,1); } int sizx(int x){ x=findRoot(x); return siz[x]; } bool unite(int x, int y){ x=findRoot(x); y=findRoot(y); if(x==y) return 0; if(siz[x]<siz[y]){ swap(x,y); } root[y]=root[x]; siz[x]+=siz[y]; return 1; } int findRoot(int x){ if(x==root[x]){ return x; } return root[x]=findRoot(root[x]); } }; const int MAX_N=1e5+5; vector<int>g[MAX_N]; vector<bool>col(MAX_N,0); void flipdfs(int st, vector<int>(&g)[], int p){ col[st]=!col[st]; for(int i : g[st]){ if(i==p) continue; flipdfs(i,g,st); } } signed main(){ ios::sync_with_stdio(0); cin.tie(0); int n,q; cin >> n >> q; dsu ds(n); while(q--){ int a,b; char t; cin >> t >> a >> b; a--;b--; if(t=='R'){ if(ds.findRoot(a)==ds.findRoot(b)){ continue; } if(ds.sizx(a)<ds.sizx(b)){ swap(a,b); } if(col[a]!=col[b]) flipdfs(b,g,-1); ds.unite(a,b); g[a].push_back(b); g[b].push_back(a); } else if(t=='A'){ if(ds.findRoot(a)==ds.findRoot(b)){ continue; } if(ds.sizx(a)<ds.sizx(b)){ swap(a,b); } if(col[a]==col[b]) flipdfs(b,g,-1); ds.unite(a,b); g[a].push_back(b); g[b].push_back(a); } else{ if(ds.findRoot(a)!=ds.findRoot(b)){ cout << "?\n"; } else{ cout << ((col[a]==col[b]) ? "R\n" : "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...