比赛 CSP2022提高组 评测结果 MMMMMMMMMMMMMMMMMMMM
题目名称 星战 最终得分 0
用户昵称 akioi 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2022-10-30 10:03:29
显示代码纯文本
//n<=1e3,m<=1e4,q<=1e3 (5~40pts)
#include<bits/stdc++.h>
using namespace std;
int n,m,u,v,q,opt;
struct node{
	int num;
	bool b;
};
node a[10005][10005];
int cnt[10005];
bool vis[10005];
bool dfs(int x){
	if(vis[x]==1)return 1;
	for(int i=1;i<=n;i++){
		if(a[x][i].b){
			vis[i]=1;
			if(dfs(i))return 1;
		}
	}
	return 0;
}
int main(){
	freopen("csp2022_galaxy.in","r",stdin);
	freopen("csp2022_galaxy.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>u>>v;
		a[u][v].num=1;
		a[u][v].b=1;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)cnt[i]+=a[i][j].num;
	}
	cin>>q;
	for(int k=1;k<=q;k++){
		cin>>opt;
		if(opt==1){
			cin>>u>>v;
			a[u][v].b=0;
			cnt[u]--;
		}else if(opt==2){
			cin>>u;
			for(int i=1;i<=n;i++){
				if(a[i][u].num&&a[i][u].b){
					a[i][u].b=0;cnt[i]--;
				}
			}
		}else if(opt==3){
			cin>>u>>v;
			a[u][v].b=1;
			cnt[u]++;
		}else{
			cin>>u;
			for(int i=1;i<=n;i++){
				if(a[i][u].num&&a[i][u].b==0){
					a[i][u].b=1;cnt[i]++;
				}
			}
		}
		bool flag=1;
		for(int i=1;i<=n;i++){
			if(cnt[i]!=1){
				flag=0;
				break;
			}
		}
		if(!flag){
			cout<<"NO"<<endl;
			continue;
		}
		for(int i=1;i<=n;i++){
			memset(vis,0,sizeof vis);
			if(!dfs(i)){
				flag=0;
				break;
			}
		}
		if(!flag){
			cout<<"NO"<<endl;
			continue;
		}
		cout<<"YES"<<endl;
	}
	return 0;
}
/*3 6
2 3
2 1
1 2
1 3
3 1
3 2
11
1 3 2
1 2 3
1 1 3
1 1 2
3 1 3
3 3 2
2 3
1 3 1
3 1 3
4 2
1 3 2*/