求 MLE 原因

P3367 【模板】并查集

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

正解:

include<bits/stdc++.h>

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

希望更丰富的展现?使用Markdown

希望更丰富的展现?使用Markdown

希望更丰富的展现?使用Markdown

希望更丰富的展现?使用Markdown
希望更丰富的展现?使用Markdown

|