比赛 CSP2022提高组 评测结果 AAAAAAAAEEEEEEEEEEEE
题目名称 星战 最终得分 40
用户昵称 崔宸铭 运行时间 2.488 s
代码语言 C++ 内存使用 6.26 MiB
提交时间 2022-10-30 11:18:15
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=1010;
int n,m,q;
int a[N][N],cnt[N],vis[N],num[N];
void circle(int u){
	if(num[u]){
		for(int i=1;i<=n;i++){
			if(num[i]) vis[i]=1;
		}
		return;
	}
	num[u]++;
	for(int i=1;i<=n;i++){
		if(a[u][i]){
			circle(i);
		}
	}
}
bool attack(){
	for(int i=1;i<=n;i++){
		if(cnt[i]!=1) return false;
	}
	for(int i=1;i<=n;i++){
		if(!vis[i]) circle(i);
	}
	for(int i=1;i<=n;i++){
		if(!vis[i]) return false;
	}
	return true;
}
int main(){
	freopen("csp2022_galaxy.in","r",stdin);
	freopen("csp2022_galaxy.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=m;i++){
    	int u,v;
    	cin>>u>>v;
    	a[u][v]=1;
    	cnt[u]++;
	}
	cin>>q;
	while(q--){
		int t;
		cin>>t;
		int u,v;
		if(t==1){
			cin>>u>>v;
			cnt[u]--;
			a[u][v]=-1;
		}else if(t==2){
			cin>>u;
			for(int i=1;i<=n;i++){
				if(a[i][u]==1){
					a[i][u]=-1;
					cnt[i]--;
				}
			}
		}else if(t==3){
			cin>>u>>v;
			cnt[u]++;
			a[u][v]=1;
		}else{
			cin>>u;
			for(int i=1;i<=n;i++){
				if(a[i][u]==-1){
					a[i][u]=1;
					cnt[i]++;
				}
			}
		}
		if(attack()) cout<<"YES";
		else cout<<"NO";
		cout<<endl;
	}
	return 0;
}