20求助
查看原帖
20求助
1199534
ycy1124楼主2024/6/1 11:15
#include<bits/stdc++.h>
using namespace std;
int f[50001],p[50001],q[50001];//c,bc
int find(int x){
	if(x==f[x])return x;
	return find(f[x]);
}
void hb(int x,int y){
	f[find(x)]=find(y);
}
int main(){
	int n,k,ans=0;
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++){
		f[i]=i;
	}
	for(int i=1;i<=k;i++){
		int ch,x,y;
		scanf("%d%d%d",&ch,&x,&y);
		if(x>n||y>n){
			ans++;
			continue;
		}
		else if(ch==1&&(find(q[x])==y||find(p[x])==y||find(q[y])==x||find(p[y])==x)){
			ans++;
			continue;
		}
		else if(find(x)==find(y)&&ch==2){
			ans++; 
			continue;
		}
		else if(ch==2&&find(q[x])==y||find(p[y])==x){
			ans++;
			continue;
		}
		else if(ch==2&&(find(p[x])!=find(y)||find(q[y])!=find(x)))
		if(ch==1){
			hb(x,y);
		}
		else{
			if(p[x]==0){
				p[x]=find(y);
			}
			else{
				p[x]=find(p[x]);
				hb(p[x],y);
			}
			if(q[y]==0){
				q[y]=find(x);
			}
			else{
				q[y]=find(q[y]);
				hb(q[y],x);
			}
		}
	}
	printf("%d",ans);
	return 0;
}
2024/6/1 11:15
加载中...