• 并查集(如 畅通工程或经商人脉问题)


    BNU Training 2018 训练2 http://www.bnuoj.com/v3/contest_show.php?cid=9321#problem/D

    哈尔滨理工大学第七届程序设计竞赛初赛(高年级组)https://www.nowcoder.com/acm/contest/27/D

    并查集的实现主要依赖函数的构造:

    一般来说只需要一个 int find(int  x) ;即可,可以说只要把 int find (int x) ;函数写好,并查集的基本操作基本就都能实现了

    这个函数如果简单的话,就直接 while(x != pre[x]) x  = pre[x]; return x; 即可,而为了达到压缩路径提高查找速度的效果,一般再写一段代码把每个集合都直接连在根上,下面为具体的代码实现:(分为三步:

    1、find函数的实现(尽可能地压缩路径,(但并不能保证每个集合都是直接连在根上的)))

    2、合并效果的实现(可以写个join或直接写在main()里面)

    3、通过一个数组 + find(i) 遍历每个 节点的根(因为压缩只是尽可能压缩,并不能保证每个节点直接连在根上,所以还是需要利用find找根)

    1、find函数的实现

    2、合并集合的操作(可以写成一个join 函数,也可以直接写在主函数内,如下)

    3、利用一个数组来统计每个点的根的情况从而知道总共有几个大集合,

    (因为上面那个路径压缩只是尽可能地压缩路径,并不能保证每个集合都是直接连在根上的,所以需要这一步)

  • 相关阅读:
    Excel相关界面
    延时函数
    VBA窗体之ListView分页显示
    VBA窗体之ListView
    医疗机构税收大全及理论探讨(2018年)
    VBA_Xpath定位元素
    VBA_CSS定位元素
    VBA_DOM定位元素
    VBA_IE&HTTP
    Listbox
  • 原文地址:https://www.cnblogs.com/MekakuCityActor/p/8321863.html
Copyright © 2020-2023  润新知