• 动规(22)-并查集基础题——CD收藏 cd.cpp(并查集)


    Description

        约翰平常爱听歌,所以买了很多的CD来收藏,但是因为平常整理不当,所以忘记了这些CD的歌手是谁。现在他想知道他到底收藏了多少位歌手的专辑,于是他想了一个办法,同时拿出两个CD来听,可以分辨出来是否为同一个歌手唱的。(如果没有说明则认为是没有分辨出来,为不同歌手)现在他列了一个表记录哪些专辑是同一歌手,但他面对着这一堆记录不知如何处理,请你告诉他到底他有多少个歌手的专辑。

    Input

        第一行n,m。n表示CD的个数(标号分别为1到n),m表示约翰所分辨出来的共有几组。接下来的m行每一行有两个数a,b。表示a唱片和b唱片是同一个歌手。(1<=n,m<=10000)

    Output

        总计的歌手数量。

    Sample Input

    10 9

    1 2

    3 4

    5 2

    4 6

    2 6

    8 7

    9 7

    1 6

    2 4

    Sample Output

    3

    1. #include <cstdio>
    2. #include <iostream>
    3. #include <cstring>
    4. using namespace std;
    5. int n, m, x, y;
    6. int f[10005];
    7. int find(int v)
    8. {
    9. return f[v] == v ? v : f[v] = find(f[v]);
    10. }
    11. int merg(int v, int u)
    12. {
    13. int t1, t2;
    14. t1 = find(v);
    15. t2 = find(u);
    16. f[t2] = t1;
    17. return 0;
    18. }
    19. int main()
    20. {
    21. freopen("cd.in", "r", stdin);
    22. freopen("cd.out", "w", stdout);
    23. scanf("%d%d", &n, &m);
    24. int sum = 0;
    25. memset(f, 0, sizeof(f));
    26. for (int i = 1; i <= n; i++)
    27. f[i] = i;
    28. for (int i = 1; i <= m; i++)
    29. {
    30. scanf("%d%d", &x, &y);
    31. merg(x, y);
    32. }
    33. for (int i = 1; i <= n; i++)
    34. if (f[i] == i)
    35. sum++;
    36. printf("%d\n", sum);
    37. return 0;
    38. }

    map的基本知识普及

          C++ Maps是一种关联式容器包含关键字/

          begin()             返回指向map头部的迭代器

          clear(            删除所有元素

          count()             返回指定元素出现的次数

          empty()            如果map为空则返回true

          end()              返回指向map末尾的迭代器

          erase()             删除迭代器所指一个元素

          find()              查找一个元素

          insert()             插入元素

          size()              返回map中元素的个数

          swap()             交换两个map

          upper_bound()      返回键值>给定元素的第一个位置

  • 相关阅读:
    在VMware上创建虚拟机并安装CentOS
    关于我学前端一年的体验(心得)
    2023十大杰出外盘黄金交易APP平台最新排名
    数字孪生农业丨智慧农业稻米加工厂从“看天吃饭”到“知天而作”
    字符串的使用方法之startwith()-以XX开头、endsWith()-以XX结尾、trim()-删除两端空格
    Python3中启动简易HTTPServer
    MySQL篇---第一篇
    【毕业设计】深度学习卫星遥感图像检测与识别 -opencv python 目标检测
    Java(SpringBoot04)
    人工智能算法面试大总结-总目录
  • 原文地址:https://blog.csdn.net/hdq1745/article/details/126812648