是dalao就进来看看
查看原帖
是dalao就进来看看
766275
IAKIOI2020楼主2024/8/2 22:04

为什么这么写不对

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+100;
int T,F,U=0;
int n,m,s[N],fa[N],flag[N];
int f(int x){return x<=n?x+n:x-n;}
int find(int x){
	int res;
	if(x==T or x==F) res=x;
	else if(flag[-x+n] or x==U) res=U;
	else if(flag[x+n]) res=T;
	else{
		flag[x+n]=1;
		if(fa[x]==x) res=x;
		else res=fa[x]=find(fa[x]); 
		flag[x+n]=0;
	}
	return res;
}
void work(){
	int ans=0;
	for(int i=1;i<=n;i++) if(find(i)==U) ans++;
	cout<<ans<<endl;
}
void init(){
	cin>>n>>m;T=n+1,F=-n-1;
	for(int i=1;i<=2*n;i++) fa[i]=i;
	for(int k=1;k<=m;k++){
		char opt; cin>>opt;
		int i,j;
		if(opt=='T'){
			cin>>i;
			fa[i]=T,fa[i+n]=F;
		}
		else if(opt=='F'){
			cin>>i;
			fa[i]=F,fa[i+n]=T;
		}
		else if(opt=='U'){
			cin>>i;
			fa[i]=U,fa[i+n]=U;
		}
		else if(opt=='+'){
			cin>>i>>j;
			fa[i]=fa[j];
			fa[i+n]=fa[j+n];
		}
		else{
			cin>>i>>j;
			fa[i]=f(fa[j]);
			fa[i+n]=f(fa[j+n]);
		}
	}
}
int main(){
	int c,t;
	cin>>c>>t;
	while(t--){
		init();
		work();
	}
}
2024/8/2 22:04
加载中...