#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; } |