zoukankan      html  css  js  c++  java
  • hdu1232 并查集

            并查集者,并也,查也,统统归于集合也。即其是关于集合的操作——并,查。所以并查集的关键也就是对集合的合并与对元素的查找,查找某一元素属于哪个集合。一般情况下定义一个数组flag[](数组真是太有用了),用来记录每个元素所属的集合。当然如果用一般情况去查或是合并元素,find()与merge()两个函数的复杂度为n。看起来时间复杂度并不大,但这里我们还可以进行改进,就是利用树结构。

            如果 flag[i]= i    //i就是这个树的跟

           如果flag[i]=j且i<>j   j就是i的父节点

      根据这个思想完成find()与merge()函数

    int find(int x)
    {
    int r;
    r=x;
    while(flag[r]!=r)
    r=flag[r];
    int b=x;
    int f;
    while(b!=r)
    {
    f=flag[b];
    flag[b]=r;
    b=f;
    }
    }
    void merge(int x,int y)
    {
    int fx;
    int fy;
    fx=find(x);
    fy=find(y);
    if(flag[fx]!=fy)
    flag[fx]=fy;
    }

           

  • 相关阅读:
    干草金字塔
    ⑨的完美搭积木
    门(door)
    ⑨的完美冻青蛙(frog)
    An overnight dance in discotheque
    逃跑(escape)
    BZOJ4390: [Usaco2015 dec]Max Flow
    BZOJ3732: Network
    BZOJ1121: [POI2008]激光发射器SZK
    BZOJ3713: [PA2014]Iloczyn
  • 原文地址:https://www.cnblogs.com/orangeblog/p/2240664.html
Copyright © 2011-2022 走看看