• 动规(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()      返回键值>给定元素的第一个位置

  • 相关阅读:
    JavaScript基础之七JavaScript函数的使用
    【Prism系列】Region的用法
    使用JMeter软件压测接口配置说明
    如何测试模型的推理速度
    游戏开始数量级管理(TS脚本)
    C++_红黑树
    数据库PostgreSQL PG 字符串拼接,大小写转换,substring
    C++11新特性(右值引用,万能转发)
    (Note)阿克西斯ACASIS DT-3608双盘位硬盘阵列盒RAID设置
    无人驾驶Autoware介绍
  • 原文地址:https://blog.csdn.net/hdq1745/article/details/126812648