没有满分的人必看!错误在这里!

P3367 【模板】并查集

寒·Kun @ 2018-07-21 19:50:52

本人最近正好在学并查列,发现了一个很容易错的东西!

转自 @封禁用户f8617dda的博客

  1. 并查列其实就是一棵树,把合并在一起的就作为父子关系,其实就是树中的“父亲表示法”

定义如下:

struct Node{
    int father;//父亲
}s[MAXN];//数组
  1. 很多人都不知道,其实有些数合并后他们就在同一个格子里面了。但很多时候在判断一个数是否是他的父亲或者他是我的父亲,但那个树假如是与一个树合并了的,那岂不是父亲就是合并的树?

错误代码如下:

switch(z){
    case 1:{
        s[y].father=x;
        break;
    }
    case 2:{
        if(s[y].father==x||s[x].father==y){
    printf("Y\n");
}else{
    printf("N\n");
}
    break;
    }
}

千万不可以这样!

所以就用到了并查列中的化简:就是如果一个树找目前的父亲,一定会找到这棵树的根。然而在查找的过程中,就可以把他的父亲的父亲标示移到他找到的根,这样一直下去就行了。

有需要知识课件的,私聊我( 封禁用户名f8617dda)

记得点赞哦!


by 蒟蒻lxy @ 2018-12-03 22:35:36

???点赞???


上一页 |