10
查看原帖
10
934631
Perry6632楼主2025/8/3 12:01
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll N,K,ans=0,a,b,c,n[500001]={};
tuple<ll,ll,ll> s[100001]={};
ll find(ll x){
	if(n[x]==x)
		return x;
	n[x]=find(n[x]);
	return n[x];
}
//A 吃 B,B 吃 C,C 吃 A
//a: b:N c:2N
bool eat(ll a,ll b){
	if(find(a)==find(b))
		return 0;
	n[find(b+N)]=find(a);
	n[find(b+2*N)]=find(a+N);
	n[find(b+3*N)]=find(a+2*N);
	return 1;
}
bool same(ll a,ll b){
	if(find(a)==find(b+N))
		return 0;
	n[find(b)]=find(a);
	n[find(b+N)]=find(a+N);
	n[find(b+2*N)]=find(a+2*N);
	return 1;
}
int main(){
	cin>>N>>K;
	iota(n,n+3*N+1,0);
	for(int i=0;i<K;i++){
		cin>>a>>b>>c;
		if((a==b&&a==2)||a>N||b>N){
			K--,i--,ans++;
			continue;
		}
		if(a==1)
			if(!same(b,c))
				ans++;
		else if(a==2)
			if(!eat(b,c))
				ans++;	
	}
	cout<<ans;
	return 0;
}

2025/8/3 12:01
加载中...