#include<bits/stdc++.h>
using namespace std;
int fa[3000001],val[3000001];
int n,m;
struct sj
{
int x,y;
};
sj a[100001];
void init()
{
for(int i=1;i<=2*n;i++)
{
fa[i]=i;
val[i]=0;
}
return;
}
int findn(int x)
{
if(fa[x]==x) return x;
else return fa[x]=findn(fa[x]);
}
void merge(int x,int y)
{
int fx=findn(x),fy=findn(y);
fa[fx]=fy;
return;
}
int main()
{
cin>>n>>m;
init();
long long cnt=0;
for(int i=1;i<=m;i++)
{
int op,x,y;
cin>>op>>x>>y;
if(x>n||y>n)
{
cnt++;
continue;
}
int fx=findn(x),fy=findn(y),fx2=findn(x+n),fy2=findn(y+n),fx3=findn(x+2*n),fy3=findn(y+2*n);
if(op==1)
{
if(fx==fy2||fx2==fy)
{
cnt++;
continue;
}
else
{
merge(fx,fy);
merge(fx2,fy2);
merge(fx3,fy3);
}
}
else if(op==2)
{
if(fx==fy|| fx==fy2)
{
cnt++;
continue;
}
else
{
merge(x,y+2*n);
merge(y,x+n);
}
}
}
cout<<cnt<<endl;
return 0;
}
拓展域并查集,求调