为什么我特判a==b,只得到了50分,并且样例也没有过,如果我不特判这个条件,就会全对呢?
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+100;
int fa[3*N];
inline int find(int x)
{
if(fa[x]!=x)
fa[x]=find(fa[x]);
return fa[x];
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=3*n;i++)
fa[i]=i;
int cnt=0;
for(int i=1;i<=k;i++)
{
int c,a,b;
scanf("%d%d%d",&c,&a,&b);
if(a>n||b>n)
cnt++;
else if(a==b)//就是这两行,我一加上就只得50分,连样例都没有过
cnt++;//这是为什么呢?
else
{
if(c==1)
{
if(find(n+a)==find(b)||find(2*n+a)==find(b))
cnt++;
else
{
fa[find(a)]=find(b);
fa[find(n+a)]=find(n+b);
fa[find((2*n)+a)]=find((2*n)+b);
}
}
else
{
if(find(a)==find(b)||find(2*n+a)==find(b))
cnt++;
else
{
fa[find(n+a)]=find(b);
fa[find((2*n)+a)]=find(n+b);
fa[find(a)]=find((2*n)+b);
}
}
}
}
//for(int i=1;i<=3*n;i++)
// printf("%d ",fa[i]);printf("\n\n");
printf("%d\n",cnt);
return 0;
}