제출 #1326133

#제출 시각아이디문제언어결과실행 시간메모리
1326133boclobanchatJoker (BOI20_joker)C++20
0 / 100
2093 ms7664 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=2e5+5; int dsu[MAXN],cnt[MAXN],F[MAXN],R[MAXN],cc=0; stack< pair<int,int> > st; pair<int,int> edge[MAXN]; int root(int i) { if(!dsu[i]) return i; return root(dsu[i]); } int getval(int i) { if(!dsu[i]) return F[i]; return F[i]^getval(dsu[i]); } void merge(int i,int j) { int a=getval(i),b=getval(j); if((i=root(i))==(j=root(j))) { cc+=(a==b),st.push({-1,a==b}); return ; } if(cnt[i]<cnt[j]) swap(i,j); dsu[j]=i,cnt[i]+=cnt[j],F[j]=(a==b),st.push({i,j}); } void rollback() { int x=st.top().first,y=st.top().second; st.pop(); if(x==-1) cc-=y; else dsu[y]=F[y]=0,cnt[x]-=cnt[y]; } void solve(int l,int r,int pl,int pr) { if(l>r) return ; int mid=(l+r)/2; for(int i=l-1;i<mid;i++) if(i) merge(edge[i].first,edge[i].second); R[mid]=pr; while(!cc) merge(edge[R[mid]].first,edge[R[mid]].second),R[mid]--; if(cc) R[mid]++,rollback(); if(l==r) { int res=R[mid]; while(res<pr) res++,rollback(); for(int i=mid-1;i>=l-1;i--) if(i) rollback(); return ; } int res=R[mid]; while(res<pr) res++,rollback(); solve(mid+1,r,R[mid],pr); for(int i=mid-1;i>=l-1;i--) if(i) rollback(); while(res>R[mid]) merge(edge[res].first,edge[res].second),res--; solve(l,mid-1,pl,R[mid]); while(res<pr) res++,rollback(); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m,q; cin>>n>>m>>q; int p=m; for(int i=1;i<=m;i++) cin>>edge[i].first>>edge[i].second; for(int i=1;i<=m;i++) { merge(edge[i].first,edge[i].second); if(cc) { for(int j=i;j<=m;j++) R[j]=m+1; p=i-1; break; } } if(!cc) for(int i=1;i<=m;i++) R[i]=i-1; else { while(!st.empty()) rollback(); solve(1,p,1,m); } for(int i=1;i<=q;i++) { int l,r; cin>>l>>r; if(R[l]<=r) cout<<"NO\n"; else cout<<"YES\n"; } }
#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...