新人求助,并查集那题,样例AC提交WA

P3367 【模板】并查集

S0CRiA @ 2020-11-25 22:45:29

RUN ID42600775

以下是我的代码:

//P3367
#include <iostream>
using namespace std;
int a[10005];

void init(int n){
    for(int i=1; i<=n; i++) a[i]=i;
    return;
}

int get_father(int n){
    if(a[n]==n) return n;
    a[n]=get_father(a[n]);
    return a[n];
}

bool merge(int x,int y){
    int f1,f2;
    f1=get_father(x);
    f2=get_father(y);
    if(f1==f2) return true;
    a[y]=f1;
    return false;
}

int main(){
    int n,m,flg,in1,in2;
    cin >> n >> m;
    init(n);
    for(int i=0; i<m; i++){
        cin >> flg >> in1 >> in2;
        bool same=merge(in1,in2);
        if(flg==2){
            if(same) cout << 'Y' << endl;
            else     cout << 'N' << endl;
        }
    }
    return 0;
}

(


by fresh_boy @ 2020-11-25 22:46:55

... 不管了 先 % Fee


by xyf007 @ 2020-11-25 22:47:50

应该是a[f2]=f1


by Remake_ @ 2020-11-25 22:48:22

代码明显有问题,你本机是怎么A的。。


by xyf007 @ 2020-11-25 22:48:23

为什么你不去问和你同名的大佬呢?


by S0CRiA @ 2020-11-25 22:48:37

@xyf007 改了还是错的


by fresh_boy @ 2020-11-25 22:49:18

@xyf007 严格意义上不同名


by S0CRiA @ 2020-11-25 22:50:59

@Miracle_Creator

本机我确实是运行通过答案对的啊。。。有问题烦请明示。。。

我的思路是将合并与判断合在一个函数里,如果它们有同一个父亲就返回true否则false;他给的样例输入我本机输出答案是对的,DEV C++编译器。。。

当然你要吐槽我是“C++风格的C++”。。。这。。。


by zuoruiping @ 2020-11-25 22:51:50

@Fее_cle6418 你查询操作,如果两个不是同一并查集会合并


by S0CRiA @ 2020-11-25 22:55:27

查询函数合并函数拆开,过了。。


by JeffWang2019 @ 2020-11-25 22:58:05

%!


| 下一页