不知道哪里挂了qwq
#include<bits/stdc++.h>
#define F(i,j,r) for(int i=j;i<=r;++i)
#define RI register int
using namespace std;
const int N=5e6+5;
inline int read(){
RI f=1,x=0;
char s=getchar();
while(s<'0'||s>'9'){if(s=='-') f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=(x<<3)+(x<<1)+s-'0';s=getchar();}
return x*f;
}
int x,y,ans=0;
int op;
int cnt[N],f[N];
int n,m;
int find(int k){
if(f[k]==k)return k;
else return f[k]=find(f[k]);
}
void unite(int x,int y){
if(find(x)==find(y))return;
if(cnt[find(x)]<cnt[find(y)])f[find(x)]=find(y);
else{
f[find(y)]=find(x);
if(cnt[x]==cnt[y])++cnt[x];
}
}
int main(){
n=read(),m=read();
F(i,0,n*3-1)cnt[i]=0,f[i]=i;
F(i,1,m){
op=read(),x=read(),y=read();
int t=op,xx=x-1,yy=y-1;
if(xx<0||n<=x||y<0||n<=y){
++ans;
continue;
}
if(t==1){
if(find(x)==find(y+n)||find(x)==find(y+n*2))++ans;
else{
unite(x,y);
unite(x+n,y+n);
unite(x+n+n,y+n+n);
}
}
else{
if(find(x)==find(y)||find(x)==find(y+n*2))++ans;
else{
unite(x,y+n);
unite(x+n,y+n+n);
unite(x+n+n,y);
}
}
}
printf("%d",ans);
return 0;
}