Java教程

算法基础课:合并集合

本文主要是介绍算法基础课:合并集合,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int s[N], p[N];
int find(int x)
{
    if (p[x] != x) p[x] = find(p[x]);
    return p[x];
}
void merge(int a, int b)
{
    int x = find(a), y = find(b);
    p[x] = y;
}
void query(int a, int b)
{
    if (find(a) == find(b))
    puts("Yes");
    else
    puts("No");
}
int main()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i ++)
    {
        p[i] = i;
    }
    while (m --)
    {
        string op;
        int a, b;
        cin >> op >> a >> b;
        if (op == "M")
        {
            merge(a, b);
        }
        if (op == "Q")
        {
            query(a, b);
        }
    }
}
这篇关于算法基础课:合并集合的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!