WA了三个点求调/HACK
查看原帖
WA了三个点求调/HACK
349824
WsW_花逝爆零人楼主2025/1/21 21:06
#include<bits/stdc++.h>
using namespace std;
int t,n;
int a[23];
bool dead[23];
bool used[23];
bool todead[23];

//vector<int>touse;
void init(){
	memset(used,0,sizeof(used));
	memset(todead,0,sizeof(todead));
}

bool check(int id){
	return id>n||id<1||dead[id];
}
bool uskill(int opt,int id){
	if((opt==0&&id!=1)||((opt==1||opt==2)&&id!=4)||(opt==3&&id!=3))return 1;
	return 0;
} 
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>t>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	while(t--){
		init();
		bool wrong=0;
		int m; cin>>m;
		for(int i=1;i<=m;i++){
			int opt,u,v; cin>>opt>>u>>v;
			if(wrong)continue;
			if(check(u)||check(v)||used[u]||(opt!=2&&u==v)||uskill(opt,a[u])/**/){
				wrong=1;
				continue;
			}
//			cerr<<"NOT\n";
			if(opt==0||opt==1){
				if(todead[u]){
					wrong=1;
					continue;
				}
				todead[v]=1;
			}
			if(opt==2){
				if(!todead[v]){
					wrong=1;
					continue;
				}
				todead[v]=0;
				if(a[v]==3)used[v]=0;
			}
			if(opt==3){
				if(!todead[u]||todead[v]){
					wrong=1;
					continue;
				}
				todead[v]=1;
			}
			used[u]=1;
		}
		for(int i=1;i<=n;i++){
			if(a[i]==3&&todead[i]&&!used[i]){
				wrong=1;
				break;
			}
		}
		if(wrong)cout<<"Wrong\n";
		else{
			int cnt=0;
			for(int i=1;i<=n;i++)cnt+=todead[i];
			if(cnt){
				cout<<cnt<<' ';
				for(int i=1;i<=n;i++){
					if(todead[i])cout<<i<<' ';
					dead[i]&=todead[i];
				}
				cout<<'\n';
			}
			else cout<<"Safe\n";
		}
	}
	return 0;
}
2025/1/21 21:06
加载中...