分类并查集,10PS,求调
查看原帖
分类并查集,10PS,求调
1238574
dzy15373891653楼主2024/12/18 20:28
#include<bits/stdc++.h>
using namespace std;
const int N=5e4+5;
int n,k,x,y,z,ans,fa[N*3];
int myself(int x)
{
	return x;
}
int myeat(int x)
{
	return (x+n-1)%(n*3)+1;
}
int mybeawhoch(int x)
{
	return (x+(n*2)-1)%(n*3)+1;
}
int find(int x)
{
	if(fa[x]==x) return x;
	return find(fa[x]);
}
void merge(int x,int y)
{
	if(find(x)!=find(y)) 
	{
		fa[find(y)]=find(x);
	}
}
void pdtl(int x,int y)
{
	if(myeat(x)==mybeawhoch(y))
	{
		ans++;
	}
	else if(mybeawhoch(x)==myeat(y))
	{
		ans++;
	}
	else
	{
		merge(myeat(x),myeat(y));
		merge(mybeawhoch(x),mybeawhoch(y));
		merge(myself(x),myself(y));
	}
}
void pdbs(int x,int y)
{
	if(myeat(x)==mybeawhoch(y))
	{
		ans++;
	}
	else if(mybeawhoch(x)==myeat(y))
	{
		ans++;
	}
	else
	{
		merge(myself(x),myeat(y));
		merge(mybeawhoch(x),myself(y));
		merge(myeat(x),mybeawhoch(y));
	}
}
int main()
{
	cin>>n>>k;
	for(int i=1;i<=n*3;i++)
	{
		fa[i]=i;
	}
	for(int i=1;i<=k;i++)
	{
		cin>>z>>x>>y;
		if(x>n||y>n)
		{
			ans++;
			continue;
		} 
		if(z==1)
		{
			pdtl(x,y);
		}
		else
		{
			if(x==y) 
			{
				ans++;
				continue;
			}
			pdbs(x,y);
		}
	}
	cout<<ans<<' ';
	return 0;
}
2024/12/18 20:28
加载中...