30pts求调教代码
查看原帖
30pts求调教代码
715233
Dino_chx楼主2023/9/28 15:15
#include<bits/stdc++.h>
using namespace std;
const int N=5e4+7;
int n,k,fa[N<<2],fake;
int find(int f)
{
	return (fa[f]==f)?(f):(fa[f]=find(fa[f]));
}
void unity(int x,int y)
{
	fa[find(x)]=find(y);
	return; 
}
int main()
{
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n*3;i++)
	{
		fa[i]=i;
	}
	while(k--)
	{
		int op,x,y;
		scanf("%d%d%d",&op,&x,&y);
		if(x>n||y>n)
		{
			fake++;
			continue;
		} 
		if(op==1)
		{
			if(find(x+n)==find(y))
				fake++;
			else if(find(x+2*n)==find(y))
				fake++;
			else
			{
				unity(x,y);
				unity(x+n,y+n);
				unity(x+2*n,y+2*n);
			}
		}
		else if(op==2)
		{
			if(x==y)
				fake++;
			else if(find(x)==find(y))
				fake++;
			else if(find(x*2+n)==find(y))
				fake++;
			else
			{
				unity(x,y+2*n);				
				unity(x+n,y);
				unity(x+2*n,y+n);
			}
		}
	}
	printf("%d",fake);
	return 0;	
}
2023/9/28 15:15
加载中...