比赛 CSP2022提高组 评测结果 AAAAAAAAEEEEEEEEEEEE
题目名称 星战 最终得分 40
用户昵称 ムラサメ 运行时间 2.427 s
代码语言 C++ 内存使用 246.92 MiB
提交时间 2022-10-30 10:53:34
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,u,v,q,opt;
struct node{
    int num;
    bool b;
}a[7001][7001];
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);
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
    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;
}