zoukankan      html  css  js  c++  java
  • 并查集模板、

    并查集是一种用来管理元素分组情况的数据结构、

    并查集的复杂度:并查集加入两个优化(路径压缩和高度的合并)以后效率很高,对n个元素的并查集进行一次操作的复杂度是O(a(n)).在这里,a(n)是阿克曼(Ackermann)函数的反函数,这比O(log(n))还快,不过这是“均摊复杂度”,也就是说不是每一次操作都满足这个复杂度,而是多次操作以后平均每一次的操作的复杂度是O(a(n))

     1 int par[MAX_N];        //父亲
     2 int rank[MAX_N];    //树的高度
     3 
     4 //初始化n个元素
     5 void init(int n)
     6 {
     7     for(int i=0;i<=n;++i){
     8         par[i]=i;
     9         rank[i]=0;
    10     }
    11 }
    12 //查询树的根非递归实现 
    13 int find(int x)
    14 {
    15     while(par[x]!=x)
    16         x=par[x];
    17     return x;
    18  }
    19  //合并x和y所属集合
    20  void unite(int x,int y)
    21 {
    22      int fx=find(x);
    23     int fy=find(y);
    24     if(fx==fy)    return;
    25     if(rank[fx]>rank[fy])
    26         par[fx]=fy;
    27     else{
    28         par[fy]=fx;
    29         if(rank[fx]==rank[fy])    
    30             rank[x]++;
    31     }
    32 }
    33 //关于路径压缩 
    34 int find2(int x)
    35 {
    36     int fx=find(x);
    37     int t;
    38     while(x!=fx){
    39         t=par[x];
    40         par[x]=fx;
    41         x=t;
    42     }
    43     return fx;
    44 }
  • 相关阅读:
    java1.5新特性
    [转载]传智播客_SQL入门
    集合类的应用
    多线程的应用
    包的使用
    异常的应用finally与总结
    自定义异常以及runtime类
    异常的处理
    SpringMVC_05 利用spring框架来处理异常
    SpringMVC_04 拦截器 【拦截器的编程步骤】【session复习?】
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5164536.html
Copyright © 2011-2022 走看看