悬5关
  • 板块学术版
  • 楼主focus_costan1
  • 当前回复13
  • 已保存回复13
  • 发布时间2024/7/1 16:52
  • 上次更新2024/7/1 19:38:35
查看原帖
悬5关
1148600
focus_costan1楼主2024/7/1 16:52

三值逻辑

#include<bits/stdc++.h>
using namespace std;
int f[200005],size[200005];
int vis[200005];
char tfu[200005];
int find(int x){
	return f[x]==x?x:f[x]=find(f[x]);
}
void merge(int x,int y){
	int x1=find(x);
	int x2=find(y);
	if(x1==x2){
		return ;
	}
	f[x1]=x2;
	size[y]+=size[x];
}
int main(){
	int c,t;
	scanf("%d%d",&c,&t);
	while(t--){
		 int n,m;
		 scanf("%d%d",&n,&m);
		 for(int i=1;i<=2*n;i++){
		 	f[i]=i;
		 	size[i]=1;
		 }
		 for(int i=1;i<=n;i++){
		 	char s;
		 	int x,y;
		 	cin>>s;
		 	if(s=='T'){
		 		cin>>x;
			}
			if(s=='F'){
				cin>>x;
			}
			if(s=='U'){
				cin>>x;
				merge(x,x+n);
			}
			if(s=='+'){
				cin>>x>>y;
				merge(x,y);
				merge(x+n,y+n);
			}
			if(s=='-'){
				cin>>x>>y;
				merge(x,y+n);
				merge(x+n,y);
			}
		 } 
		int cnt=0;
		for(int i=1;i<=n;i++){
			if(find(i)==find(i+n)&&vis[find(i)]==0){ 
				vis[find(i)]=1;
				cnt+=size[find(i)];
			}
		}
		cout<<cnt<<endl;
	}
	return 0;
}
2024/7/1 16:52
加载中...