MLE???

P3367 【模板】并查集

猜一猜我是谁 @ 2021-07-09 22:27:08

#include<bits/stdc++.h>
using namespace std;
int f[10001];
int m,n,i,z,x,y;
int find(int x)
{
    return f[i]==i?i:find(f[x]);
}
int main()
{
    cin>>n>>m;
    for(i=1;i<=n;i++) f[i]=i;
    for(i=1;i<=m;i++)
    {
        cin>>z>>x>>y;
        if(z==1) 
            {if(find(x)!=find(y)) f[find(y)]=find(x);}
        else{ if(find(x)==find(y)) cout<<"Y";
              else cout<<"N";}
    }
    return 0;
}

by Dry_ice @ 2021-07-09 22:43:22

@xmy2010 写错了

int find(int x)
{
    return f[x]==x?x:f[x]=find(f[x]);
}

by endless_loop @ 2021-07-09 22:45:52

@xmy2010

return f[i]==i?i:find(f[x]);

i哪来的


by aleph_blanc @ 2021-07-09 22:47:33

int find(int x)
{
    return f[i]==i?i:find(f[x]);
}

你这 \large{}i 应该改成 \large{}x

另外合并时根本不用判定,直接合就行,反正数据水

再送你一个小优化

inline int find (int x) {
    if (f[x] == x) {
        return x;
    }
    f[x] = find (f[x]);
    return f[x];
} // 让这个节点直接在寻找祖宗的时候把祖宗认成爸爸

by aleph_blanc @ 2021-07-09 22:51:10

@xmy2010


by 猜一猜我是谁 @ 2021-07-12 17:15:39

@aleph_blanc 谢谢︿( ̄︶ ̄)︿


by 猜一猜我是谁 @ 2021-07-12 17:26:58

现在ACle


by aleph_blanc @ 2021-07-12 17:27:33

我交上去试了试

你的换行呢?


by aleph_blanc @ 2021-07-12 17:28:27

A了就好 ̄︶ ̄)


|