菜鸟求助,关于并查集
查看原帖
菜鸟求助,关于并查集
533129
LRIXI楼主2022/6/18 11:43

一开始我先预处理出find(x),find(y)

怎么调都只有20分

后来删了,改成在合并的时候每个点都直接查询 就a了

if(x>n||y>n)
		{
			ans++;	
			continue;
		}
		//x=find(x);
		//y=find(y); 删了这里
	
		if(opt==1)
		{
			int xa=find(x+n);
			int xb=find(x+2*n);
			if(find(y)==xa||find(y)==xb)
			{
				ans++;
				continue;
			}
			f[find(x)]=find(y);
			f[find(x+n)]=find(y+n);
			f[find(x+2*n)]=find(y+2*n);
		}
		if(opt==2)
		{
			if(find(x)==find(y))
			{
				ans++;
				continue;
			}
			if(find(y+n)==find(x))
			{
				ans++;
				continue;//如果y反而是x的天敌 
			}
			f[find(x+n)]=find(y);
			f[find(x+2*n)]=find(y+n);
			f[find(x)]=find(y+2*n);
		}
	}

	//为什么先把x,y换成每个集合的根是错的? 
	//疑惑 
2022/6/18 11:43
加载中...