Wenchih @ 2018-10-29 17:08:50
int find(int xx) { if(xx == ys[xx]) { return xx; } else { ys[xx] = find(ys[xx]); return ys[xx]; } }
by qseer @ 2018-10-29 17:16:17
并查集代码没问题,MLE应该是数组开大了
by Wenchih @ 2018-10-29 17:24:57
@qseer 数组只开了10001;
by 7wwwwth @ 2018-10-29 17:30:12
你的合并函数...
by 多多良假伞 @ 2018-10-29 17:33:52
你的合并孓了
by 多多良假伞 @ 2018-10-29 17:34:16
感觉相当于把整棵树遍历了一遍xx
by daizy @ 2018-10-29 17:34:26
一开始我也MLE了
一定是内存过大
我当时128000Kb
正解:
using namespace std;
int f[100001];
int n,m;
int x,y,z;
int g(int a)
{
if(a==f[a])
return a;
return f[a]=g(f[a]);
}
void met(int a,int b)
{
f[g(a)]=g(b);
}
void issame(int a,int b)
{ if(g(a)==g(b))
cout<<"Y"<<endl;
else
cout<<"N"<<endl;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=100001;i++)
f[i]=i;
for(int j=1;j<=m;j++)
{
cin>>z>>x>>y;
if(z==1)
{
if(g(x)!=g(y))
met(x,y);
}
else
{
issame(x,y);
}
}
return 0;
}
by 霹雳搅屎棍 @ 2018-10-29 17:39:43
@daizy