越改分越低
查看原帖
越改分越低
352918
I_think_so_i_am_here楼主2024/3/24 10:13

从20分一路改到了10分,求大佬帮忙看看

#include<bits/stdc++.h>
using namespace std;
int c,t,n,m,a[200010],f[200010];
int find(int x){
	if(f[x]==x)return x;
	else return f[x]=find(f[x]);
}
int main(){
	cin>>c>>t;
	while(t--){
		cin>>n>>m;
		for(int i=1;i<=n*2;i++)f[i]=i,a[i]=1e9;
		while(m--){
			char s;
			cin>>s;
			if(s=='T'){
				int x;
				cin>>x;
				a[x]=1;
				for(int i=1;i<=n;i++){
					if(find(i)==find(x))a[i]=1;
					if(find(i)==find(x+n))a[i]=-1;
				}
			}
			if(s=='F'){
				int x;
				cin>>x;
				a[x]=-1;
				for(int i=1;i<=n;i++){
					if(find(i)==find(x))a[i]=-1;
					if(find(i)==find(x+n))a[i]=1;
				}
			}
			if(s=='U'){
				int x;
				cin>>x;
				a[x]=0;
				for(int i=1;i<=n;i++){
					if(find(i)==find(x))a[i]=0;
					if(find(i)==find(x+n))a[i]=0;
				}
			}
			if(s=='-'){
				int x,y;
				cin>>x>>y;
				if(find(x)==find(y)){
					for(int i=1;i<=n;i++){
						if(find(i)==find(x))a[i]=0;
						if(find(i)==find(x+n))a[i]=0;
					}
				}else{
					a[x]=-a[y];
					for(int i=1;i<=n;i++){
						if(find(i)==find(x))a[i]=a[x];
						if(find(i)==find(y))a[i]=a[y];
					}
					f[find(x)]=find(y+n);
					f[find(x+n)]=find(y);
				}
			}
			if(s=='+'){
				int x,y;
				cin>>x>>y;
				if(find(x)==find(y+n)){
					for(int i=1;i<=n;i++){
						if(find(i)==find(x))a[i]=0;
						if(find(i)==find(y))a[i]=0;
					}
				}else{
					a[x]=a[y];
					for(int i=1;i<=n;i++){
						if(find(i)==find(x))a[i]=a[x];
					}
					f[find(x)]=find(y);
					f[find(x)]=find(y);
				}
			}
		}
		int sum=0;
		for(int i=1;i<=n;i++){
			if(a[i]==0)sum++;
		}
		cout<<sum<<endl;
	}
	return 0;
}
2024/3/24 10:13
加载中...