文件详细信息

下载本文件

本文件的大小为 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;
}