文件详细信息
本文件的大小为 1640 字节。
#include<algorithm>
#include<cstdio>
#include<vector>
void read(int&num){
bool flag=true;
int ch=getchar();
num=0;
while(ch<48||ch>57){
if(ch=='-')flag=false;
ch=getchar();
}
while(ch>=48&&ch<=57)num=(num<<3)+(num<<1)+(ch^48),ch=getchar();
flag||(num=-num);
}
const int maxn=500005;
std::vector<int>in[maxn],out[maxn];
std::vector<bool>del[maxn];
int n,m,q,status,out_deg[maxn];
int main(){
freopen("galaxy.in","r",stdin);
freopen("galaxy.out","w",stdout);
read(n),read(m);
for(int i=1,u,v;i<=m;i++){
read(u),read(v);
in[v].push_back(u);
del[v].push_back(false);
out[u].push_back(v);
status-=(out_deg[u]==1);
out_deg[u]++;
status+=(out_deg[u]==1);
}
for(int u=1;u<=n;u++)std::sort(in[u].begin(),in[u].end());
read(q);
for(int i=1,opt,u,v,loc;i<=q;i++){
read(opt),read(u);
if(opt==1){
read(v);
loc=std::lower_bound(in[v].begin(),in[v].end(),u)-in[v].begin();
del[v][loc]=true;
status-=(out_deg[u]==1);
out_deg[u]--;
status+=(out_deg[u]==1);
}else if(opt==2){
for(int i=0;i<(int)in[u].size();i++){
if(del[u][i])continue;
del[u][i]=true;
v=in[u][i];
status-=(out_deg[v]==1);
out_deg[v]--;
status+=(out_deg[v]==1);
}
}else if(opt==3){
read(v);
loc=std::lower_bound(in[v].begin(),in[v].end(),u)-in[v].begin();
del[v][loc]=false;
status-=(out_deg[u]==1);
out_deg[u]++;
status+=(out_deg[u]==1);
}else{
for(int i=0;i<(int)in[u].size();i++){
if(!del[u][i])continue;
del[u][i]=false;
v=in[u][i];
status-=(out_deg[v]==1);
out_deg[v]++;
status+=(out_deg[v]==1);
}
}
puts(status==n?"YES":"NO");
}
return 0;
}