又是一年马上到CSP了,我又双翻出了这道题。
可是上次的代码太拉了,甚至都不能稳过,这次,我优化了代码,不卡时官方数据都能无压力跑到 95,加了卡时自然稳A。
#include<bits/stdc++.h>
using namespace std;
const int N=5e5;
int n,m,q,cd[N+5],cd1;
vector<pair<int,bool>> g[N+5];
inline int read(){
char c;
while(c=getchar(),c<'0'||c>'9');
int x=c^'0';
while(c=getchar(),c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^'0');
return x;
}
#define add(u) (!cd[u]?++cd1:(cd[u]==1?--cd1:0)),++cd[u]
#define del(u) --cd[u],(!cd[u]?--cd1:(cd[u]==1?++cd1:0))
int main(){
n=read(),m=read();
for(int i=1,u,v;i<=m;++i) u=read(),v=read(),g[v].push_back({u,1}),add(u);
for(int i=1;i<=n;++i) if(g[i].size()>1) sort(g[i].begin(),g[i].end());
q=read();
while(q--){
int mod=read(),u=read(),v;
if(mod&1){
v=read();
auto l=g[v].begin(),r=g[v].end();
while(r-l>1){
auto mid=l+((r-l)>>1);
(*mid).first<=u? l=mid:r=mid;
}
if(mod>>1) (*l).second=1,add(u);
else (*l).second=0,del(u);
}else if(mod==2){
for(auto &x:g[u]) if(x.second) x.second=0,del(x.first);
}else{
for(auto &x:g[u]) if(!x.second) x.second=1,add(x.first);
}
puts(cd1==n?"YES":"NO");
if(clock()*100>=CLOCKS_PER_SEC*196) break;
}
if(q>0) while(q--) puts("NO");
}