#include <stdio.h>
int f[500005];
int n,k,x,y,opt,i,ans;
inline int find(int x){
while(x!=f[x])
x=f[x]=f[f[x]];
return x;
}
int main(){
scanf("%d %d",&n,&k);
n*=3;
for(i=1;i<=n;++i)
f[i]=i;
n/=3;
while(k--){
scanf("%d %d %d",&opt,&x,&y);
if(x>n||y>n)
++ans;
else
if(opt==1)
if(find(x+n)==find(y)||find(x)==find(y+n))
++ans;
else{
f[find(x)]=find(y);
f[find(x+n)]=find(y+n);
f[find(x+(n<<1))]=f[find(y+n<<1)];
}
else
if(find(x)==find(y)||find(x)==find(y+n))
++ans;
else{
f[find(x)]=find(y+(n<<1));
f[find(x+n)]=find(y);
f[find(x+(n<<1))]=find(y+n);
}
}
printf("%d",ans);
return 0;
}
感觉这就是种类并查集板子题,不知道哪里写挂了。