#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#define P(a,n) for(int j=a;j<n;j++)
#define P3(a,n,z) for(int z=a;z<n;z++)
#define PD(pocz,kon,z) for(int z=pocz;z>=kon;z--)
#define W while
#define PB push_back
#define F first
#define S second
#define ll long long
#define O cout<<
#define I cin>>
#define endl '\n'
#define E '\n'
/**Worst case time complexity O(nlogn+q) */
using namespace std;
constexpr int MN=300'005;
int nalezy[MN];
int war[MN];
int il[MN];
vector<int>dogr[MN];
vector<int>wolne;
int main()
{
ios_base::sync_with_stdio(0); cin.tie(NULL);
int n,k,a,b;
char c;
I n>>k;
P(1,n+1)
{ dogr[j].PB(j);il[j]++; nalezy[j]=j;}
P(n+2, 2*n+2)
wolne.PB(j);
P(0,k)
{
I c;
if(c=='+')
{
I a>>b;
if(nalezy[a]==nalezy[b])
{war[nalezy[a]]=1;}
else{
if(il[nalezy[a]]<il[nalezy[b]])
swap(a,b);
int do_usun=nalezy[b];
if(war[do_usun]==1)
war[nalezy[a]]=1;
for(int x:dogr[nalezy[b]])
{
if(nalezy[x]!=do_usun) continue;
nalezy[x]=nalezy[a];
dogr[nalezy[a]].PB(x);
}
il[nalezy[a]]+=il[do_usun];
wolne.PB(do_usun);
}
}
else if(c=='-')
{
I a;
il[nalezy[a]]--;
if(il[nalezy[a]]==0) { wolne.PB(nalezy[a]);}
nalezy[a]=wolne.back();wolne.pop_back();
war[nalezy[a]]=0; il[nalezy[a]]=1; dogr[nalezy[a]].clear();dogr[nalezy[a]].PB(a);
}
else
{
I a;
if(war[nalezy[a]]==1) O 1;
else if(il[nalezy[a]]==1) O 0;
else O '?';
// O E;
}
/* P(1,n+1)
O nalezy[j]<<' '<<il[nalezy[j]]<<' '<<war[nalezy[j]]<<"; ";
O E;*/
}
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 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 91 | #include <iostream> #include <algorithm> #include <vector> #include <map> #define P(a,n) for(int j=a;j<n;j++) #define P3(a,n,z) for(int z=a;z<n;z++) #define PD(pocz,kon,z) for(int z=pocz;z>=kon;z--) #define W while #define PB push_back #define F first #define S second #define ll long long #define O cout<< #define I cin>> #define endl '\n' #define E '\n' /**Worst case time complexity O(nlogn+q) */ using namespace std; constexpr int MN=300'005; int nalezy[MN]; int war[MN]; int il[MN]; vector<int>dogr[MN]; vector<int>wolne; int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); int n,k,a,b; char c; I n>>k; P(1,n+1) { dogr[j].PB(j);il[j]++; nalezy[j]=j;} P(n+2, 2*n+2) wolne.PB(j); P(0,k) { I c; if(c=='+') { I a>>b; if(nalezy[a]==nalezy[b]) {war[nalezy[a]]=1;} else{ if(il[nalezy[a]]<il[nalezy[b]]) swap(a,b); int do_usun=nalezy[b]; if(war[do_usun]==1) war[nalezy[a]]=1; for(int x:dogr[nalezy[b]]) { if(nalezy[x]!=do_usun) continue; nalezy[x]=nalezy[a]; dogr[nalezy[a]].PB(x); } il[nalezy[a]]+=il[do_usun]; wolne.PB(do_usun); } } else if(c=='-') { I a; il[nalezy[a]]--; if(il[nalezy[a]]==0) { wolne.PB(nalezy[a]);} nalezy[a]=wolne.back();wolne.pop_back(); war[nalezy[a]]=0; il[nalezy[a]]=1; dogr[nalezy[a]].clear();dogr[nalezy[a]].PB(a); } else { I a; if(war[nalezy[a]]==1) O 1; else if(il[nalezy[a]]==1) O 0; else O '?'; // O E; } /* P(1,n+1) O nalezy[j]<<' '<<il[nalezy[j]]<<' '<<war[nalezy[j]]<<"; "; O E;*/ } return 0; } |
English