并查集 - 图论基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并查集 - 图论基础相关的知识,希望对你有一定的参考价值。

2017-07-25 22:18:16

writer:pprp

定义:(来源于搜狗百科)并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。

作用:用来判断两个节点是否属于同一颗树;

操作:1,查找,Find

      2,合并,Merge

#include <iostream>

using namespace std;

int parent[1000];

int Find(int x)
{
    if(parent[x] == x)
        return x;
    else
        return parent[x] = Find(parent[x]);
}

void Merge(int a,int b)
{
    int pa = Find(a);
    int pb = Find(b);
    if(pb < pa)
        swap(pb,pa);
    if(pa!=pb)
        parent[pa] = pb;
}

int main()
{
    int n, m,cnt;
    while(cin >> n)
    {
        for(int i = 1; i <= n ; i++)
            parent[i] = i;
        cin >> m;

        while(m--)
        {
            int x, y;
            cin >> x >> y;
            Merge(x, y);
        }
        cnt = -1;
        for(int i = 1; i <= n; i++)
            if(parent[i] == i)
                cnt++;
        cout << cnt <<endl;
    }
    return 0;
}

 

以上是关于并查集 - 图论基础的主要内容,如果未能解决你的问题,请参考以下文章

图论:DFS,BFS,邻接链表,并查集

图论之并查集模板和经典例题分析(Java语言描述)

解题报告图论专题

hiho14 无间道之并查集图论--并查集

算法总结图论-并查集

HDU 5652 图论之并查集