#include <bits/stdc++.h>
using namespace std;
bool vis[301000];
int nr[2001000];
int sise[2001000];
const int MAKS=300001;
int wind(int x)
{
if(nr[x]!=x)return nr[x]=wind(nr[x]);
return x;
}
int main()
{
int n,q,a,b,counter=MAKS;
string s="";
cin>>n>>q;
for(int i=MAKS+1;i<=2*1e6;i++)nr[i]=i;
for(int i=0;i<q;i++)
{
char c;
cin>>c;
if(c=='+')
{
cin>>a>>b;
if(a==b)
{
if(wind(a))vis[wind(a)]=true;
else
{
counter++;
nr[a]=counter;
vis[counter]=true;
sise[counter]++;
}
}
else if(wind(a)==wind(b) && wind(a))
{
vis[wind(a)]=true;
}
else if(!wind(a) && !wind(b))
{
counter++;
nr[a]=counter;
nr[b]=counter;
sise[counter]+=2;
}
else
{
if(wind(a) && !wind(b))
{
sise[wind(a)]++;
nr[b]=wind(a);
}
else if(!wind(a) && wind(b))
{
sise[wind(b)]++;
nr[a]=wind(b);
}
else
{
sise[wind(b)]+=sise[wind(a)];
vis[wind(b)]=max(vis[wind(b)],vis[wind(a)]);
nr[wind(a)]=wind(b);
}
}
}
else if(c=='?')
{
cin>>a;
//cout<<a<<"DAS"<<wind(a)<<endl;
if(vis[wind(a)])s+='1';
else if(wind(a)>0 && sise[wind(a)]>1)s+='?';
else s+='0';
}
else
{
cin>>a;
sise[wind(a)]--;
nr[a]=0;
}
}
cout<<s;
}
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #include <bits/stdc++.h> using namespace std; bool vis[301000]; int nr[2001000]; int sise[2001000]; const int MAKS=300001; int wind(int x) { if(nr[x]!=x)return nr[x]=wind(nr[x]); return x; } int main() { int n,q,a,b,counter=MAKS; string s=""; cin>>n>>q; for(int i=MAKS+1;i<=2*1e6;i++)nr[i]=i; for(int i=0;i<q;i++) { char c; cin>>c; if(c=='+') { cin>>a>>b; if(a==b) { if(wind(a))vis[wind(a)]=true; else { counter++; nr[a]=counter; vis[counter]=true; sise[counter]++; } } else if(wind(a)==wind(b) && wind(a)) { vis[wind(a)]=true; } else if(!wind(a) && !wind(b)) { counter++; nr[a]=counter; nr[b]=counter; sise[counter]+=2; } else { if(wind(a) && !wind(b)) { sise[wind(a)]++; nr[b]=wind(a); } else if(!wind(a) && wind(b)) { sise[wind(b)]++; nr[a]=wind(b); } else { sise[wind(b)]+=sise[wind(a)]; vis[wind(b)]=max(vis[wind(b)],vis[wind(a)]); nr[wind(a)]=wind(b); } } } else if(c=='?') { cin>>a; //cout<<a<<"DAS"<<wind(a)<<endl; if(vis[wind(a)])s+='1'; else if(wind(a)>0 && sise[wind(a)]>1)s+='?'; else s+='0'; } else { cin>>a; sise[wind(a)]--; nr[a]=0; } } cout<<s; } |
English