改了一些已知问题,但好像还不对
```cpp
#include<cstdio>
#include<algorithm>
using namespace std;
int fa[50010]={0},na[50010]={0},dd[50010]={0},cc[50010]={0};
int find(int x)
{
if(fa[x]==x)return x;
return fa[x]=find(fa[x]);
}
int main()
{
int n,k,t,x,y,sum=0,i,j;
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
{fa[i]=i;na[i]=-1;}
for(i=1;i<=k;i++)
{
scanf("%d%d%d",&t,&x,&y);
if(((x>n)||(y>n))||((t==2)&&(x==y)))sum++;
else{
if((t==1)&&((na[find(x)]!=-1)||(na[find(y)]!=-1))&&(na[find(x)]!=na[find(y)]))
sum++;
else if((t==2)&&((na[find(x)]!=-1)||(na[find(y)]!=-1))&&(na[find(y)]!=(na[find(x)]+1)&3))
sum++;
else if((t==1)&&((dd[y]==x)||(dd[x]==y)))sum++;
else
{
if(i==1)na[x]=1;
na[find(x)]=na[fa[find(x)]];na[find(y)]=na[fa[find(y)]];
if(t==1)
{
fa[find(x)]=find(y);
if(na[find(x)]==-1)
na[find(x)]=na[find(y)];
else
na[find(y)]=na[find(x)];
if(na[find(y)]!=-1)
{
if(cc[y]!=0)
{
na[find(cc[y])]=(na[find(y)]+1)%3;
dd[cc[y]]==0;cc[y]=0;
}
if(dd[y]!=0)
{
na[find(dd[y])]=(na[find(y)]+2)%3;
cc[dd[y]]==0;dd[y]=0;
}
}
if(na[find(x)]!=-1)
{
if(cc[x]!=0)
{
na[find(cc[x])]=(na[find(x)]+1)%3;
dd[cc[x]]==0;cc[x]=0;
}
if(dd[x]!=0)
{
na[find(dd[x])]=(na[find(x)]+2)%3;
cc[dd[x]]==0;dd[x]=0;
}
}
}
else
{
if(na[find(y)]==-1&&na[find(x)]!=-1)
na[find(y)]=(na[find(x)]+1)%3;
else if(na[find(x)]==-1&&na[find(y)]!=-1)
na[find(x)]=(na[find(y)]+2)%3;
else {cc[x]=y;dd[y]=x;}
}
}
}
}
printf("%d",sum);
return 0;
}
```
by ynyxxx @ 2019-06-27 11:08:07