本人第一道蓝题+刚学并查集
#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三个点。
求大佬帮我看看!