代码:
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<string>
#include<set>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int p[N];
int n,k;
int d[N];
int find(int x){
if(p[x]!=x){
int t=p[x];
p[x]=find(p[x]);
d[x]=(d[x]+d[t])%3;
}
return p[x];
}
int main(){
cin>>n>>k;
int i;
for(i=1;i<=n;i++)
p[i]=i;
int flag=0;
int x,y;
int opt;
while(k--){
scanf("%d%d%d",&opt,&x,&y);
if(x>n||y>n){
flag++;
continue;
}
if(opt==1){
int pa=find(x),pb=find(y);
if(pa==pb){
if(d[x]!=d[y]){
flag++;
continue;
}
}
else{
p[pa]=pb;
d[pa]=((-d[x]+0+3+d[y])%3+3)%3;
}
}
else{
if(x==y){
flag++;
continue;
}
int pa=find(x),pb=find(y);
if(pa==pb){
if((d[x]+3-d[y])%3!=1){
flag++;
continue;
}
}
else{
p[pa]=pb;
d[pa]=((-d[x]+1+3+d[y])%3+3)%3;
}
}
}
cout<<flag<<endl;
}