RT,不知道是数组开太大了还是爆栈了......
但是测试了下,数组即使开成 j[15002] 也还是会MLE;
而且看了眼题解,题解也用的递归求根节点,应该没出现爆栈的情况......
于是就懵了
代码:
#include<cstdio>
using namespace std;
int j[150020];
int find(int x)
{
if(x!=j[x])find(j[x]);
return j[x];
}
void _union(int x,int y)
{
j[find(x)]=find(y);
}
int read()
{
int num=0;
char c=getchar();
while(c<'0'||c>'9')c=getchar();
while('0'<=c&&c<='9')num=num*10+c-'0',c=getchar();
return num;
}
int n,k,z,x,y,ans;
int main(){
n=read(),k=read();
for(int i=1;i<=n*3;i++)
{
j[i]=i;
}
for(int i=1;i<=k;i++)
{
z=read(),x=read(),y=read();
if(x>n||y>n||x==y){
ans++;
continue;
}
if(z==1){
if(find(x)==find(y+n)||find(y+n+n)==find(x))ans++;
else{
_union(x,y);
_union(x+n,y+n);
_union(x+n+n,y+n+n);
}
}
else{
if(find(x)==find(y)||find(y+n)==find(x)){
ans++;
}else{
_union(x,y+n);
_union(x+n,y+n+n);
_union(x+n+n,y);
}
}
}
printf("%d",ans);
return 0;
}
求大佬指教QwQ