// 2024 HOPE IN VALUABLE #include<bits/stdc++.h> using namespace std; const int N=1300005; int n,Q,ans[N],id[N],ff[N]; set<int>s[N]; inline int find(int x){ return ff[x]==x?x:ff[x]=find(ff[x]); } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>Q; for(int i=1;i<=n;i++) ff[i]=id[i]=i,s[i].emplace(i); while(Q--){ string opt; cin>>opt; if(opt=="?"){ int x; cin>>x; x=find(id[x]); if(ans[x]==1) cout<<"1"; else if(ans[x]==0) cout<<"0"; else cout<<"?"; } if(opt=="+"){ int x,y; cin>>x>>y; x=find(id[x]); y=find(id[y]); if(x==y){ ans[x]=1; continue; } if(s[x].size()<s[y].size()) swap(x,y); ff[y]=x; for(int z:s[y]) s[x].emplace(z); s[y].clear(); if(ans[x]==1||ans[y]==1) ans[x]=1; else ans[x]=-1; } if(opt=="-"){ int x; cin>>x; if(ans[find(id[x])]==-1&&s[find(id[x])].size()==2) ans[find(id[x])]=0; s[find(id[x])].erase(x); id[x]=++n; ff[n]=n; s[n].emplace(x); } } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // 2024 HOPE IN VALUABLE #include<bits/stdc++.h> using namespace std; const int N=1300005; int n,Q,ans[N],id[N],ff[N]; set<int>s[N]; inline int find(int x){ return ff[x]==x?x:ff[x]=find(ff[x]); } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>Q; for(int i=1;i<=n;i++) ff[i]=id[i]=i,s[i].emplace(i); while(Q--){ string opt; cin>>opt; if(opt=="?"){ int x; cin>>x; x=find(id[x]); if(ans[x]==1) cout<<"1"; else if(ans[x]==0) cout<<"0"; else cout<<"?"; } if(opt=="+"){ int x,y; cin>>x>>y; x=find(id[x]); y=find(id[y]); if(x==y){ ans[x]=1; continue; } if(s[x].size()<s[y].size()) swap(x,y); ff[y]=x; for(int z:s[y]) s[x].emplace(z); s[y].clear(); if(ans[x]==1||ans[y]==1) ans[x]=1; else ans[x]=-1; } if(opt=="-"){ int x; cin>>x; if(ans[find(id[x])]==-1&&s[find(id[x])].size()==2) ans[find(id[x])]=0; s[find(id[x])].erase(x); id[x]=++n; ff[n]=n; s[n].emplace(x); } } return 0; } |