10分
查看原帖
10分
1069816
Tsuki091117楼主2024/3/27 18:42
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6;
int n,k,x,y,ans;
int f[N];
char opt[2];//同类 猎物 天敌 
int find(int x){
	return f[x]==x?x:f[x]=find(f[x]);
}
void merge(int x,int y){
	int fx=find(x),fy=find(y);
	if(fx!=fy){
		f[fx]=fy;
	}
}
signed main(){
	cin.tie(0);
	ios::sync_with_stdio(0);
	cin>>n>>k;
	for(int i=1;i<=n*3;i++){
		f[i]=i;
	}
	while(k--){
		cin>>opt>>x>>y;
		if(x>n||y>n||(opt=="2"&&x==y)){
			ans++;
			continue;
		}
		if(opt=="1"){
			if(find(y)==find(x+n)||find(x+2*n)==find(y)){
				ans++;
				continue;
			}
			else{
				merge(x,y);
				merge(x+n,y+n);
				merge(x+2*n,y+2*n);
			}
		}
		else{
			if(find(x)==find(y)||find(y)==find(x+2*n)){
				ans++;
				continue;
			} 
			else{
				merge(x+n,y);
				merge(x,y+2*n);	
				merge(x+2*n,y+n);
			}
		}
	}
	cout<<ans;
	return 0;
}
2024/3/27 18:42
加载中...