30分求助
查看原帖
30分求助
513069
wild_pointer楼主2022/8/16 18:20
#include<bits/stdc++.h>
using namespace std;
const int N=5e4+10;
int p[3*N];
int find(int x)
{
	if(p[x]!=x) return p[x]=find(p[x]);
	return p[x];
}
int main()
{
	int n,k,ans=0;
	cin>>n>>k;
	for(int i=1;i<=3*n;++i) p[i]=i;
	for(int i=0;i<k;++i){
		int x,y,t;
		scanf("%d%d%d",&t,&x,&y);
		if(x<1||x>n||y<1||y>n){
			++ans;
			continue;
		}
		if(t==1){
			if(find(x)==find(y+n)||find(x)==find(y+2*n)) ++ans;
			else p[find(x)]=find(y),p[find(x+n)]==find(y+n),p[find(x+2*n)]=find(y+2*n);
		}
		else{
			if(find(x)==find(y)||find(x)==find(y+2*n)) ++ans;
			else p[find(x)]=find(y+n),p[find(x+n)]=find(y+2*n),p[find(x+2*n)]=find(y);
		}
	}
	cout<<ans;
	return 0;
}
2022/8/16 18:20
加载中...