30分求助qaq
查看原帖
30分求助qaq
556205
Enormous_PuBliC楼主2022/7/1 21:26

本人第一道蓝题+刚学并查集

#include<cstdio>
int n,m,fa[300005],p,q,x,y,s,opt;
int get(int x){
	if(fa[x]==x)return x;
	return fa[x]=get(fa[x]);
}
signed main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=3*n;i++)fa[i]=i;
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&opt,&x,&y);
		if(x>n||y>n){
			s++;
			continue;
		}
		if(opt==1){
			if(get(x+n)==get(y)||get(x+n+n)==get(y)){s++;continue;}
			fa[get(x)]=get(y),fa[get(x+n)]=get(y+n),fa[get(x+n+n)]=get(y+n+n);
		}
		else{
			if(x==y){s++;continue;}
			if(get(x)==get(y)||get(x+n+n)==get(y)){s++;continue;}
			fa[get(x+n)]=get(y+n+n),fa[get(x+n+n)]=get(y+n),fa[get(x+n)]=get(y);
		}
	}
	printf("%d",s);
	return 0;
}

我觉得思路没啥问题啊,但就对了1,3,9三个点。 求大佬帮我看看!

2022/7/1 21:26
加载中...