CSP S T3 RE 求助
  • 板块学术版
  • 楼主Unnamed114514
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/10/30 23:39
  • 上次更新2023/10/27 04:46:19
查看原帖
CSP S T3 RE 求助
556362
Unnamed114514楼主2022/10/30 23:39

RT,写的 40pts 的部分分,但是 RE 了,只有 5pts。

#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+5;
int n,m,q;
bool vis[maxn];
vector<int> G[maxn];
map<int,bool> flg[maxn];
inline int read(){
	int res=0,f=0;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		f|=(ch=='-');
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		res=(res<<1)+(res<<3)+(ch^'0');
		ch=getchar();
	} 
	return f?-res:res;
}
bool dfs(int u){
	if(vis[u])
		return 1;
	vis[u]=1;
	for(int i=0,len=G[u].size();i<len;++i)
		if(!flg[u][G[u][i]])
			return dfs(G[u][i]);
}
inline bool check(int x){
	int cnt=0;
	for(int i=0,len=G[x].size();i<len;++i)
		if(!flg[x][G[x][i]])
			++cnt;
	if(cnt!=1)
		return 0;
	memset(vis,0,sizeof(vis));
	return dfs(x);
}
int main(){
// 	freopen("galaxy.in","r",stdin);
// 	freopen("galaxy.out","w",stdout);
	n=read(),m=read();
	for(int i=1;i<=m;++i){
		int u=read(),v=read();
		G[u].push_back(v);
	}
	q=read();
	while(q--){
		int t=read();
		if(t==1){
			int u=read(),v=read();
			flg[u][v]=1;
		} else if(t==2){
			int u=read();
			for(int i=1;i<=n;++i)
				flg[i][u]=1;
		} else if(t==3){
			int u=read(),v=read();
			flg[u][v]=0;
		} else{
			int u=read();
			for(int i=1;i<=n;++i)
				flg[i][u]=0;
		}
		bool p=1; 
		for(int i=1;i<=n;++i)
			if(!check(i)){
				puts("NO");
				p=0;
				break;
			}
		if(p)
			puts("YES");
	}
	return 0;
}
2022/10/30 23:39
加载中...