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

  • 相关阅读:
    Linux服务器管理入门
    前 K 个高频元素问题
    2022年最新贵州建筑八大员(机械员)模拟考试题库及答案
    备份解决方案介绍
    非零基础自学Java (老师:韩顺平) 第7章 面向对象编程(基础部分) 7.3 成员方法传参机制
    华为云各Region网络延迟实测
    【Dvhop定位】基于加权双曲线定位的Dvhop算法附matlab代码
    点云 ICP学习-IterativeClosestPoint
    易基因|植物育种:ChIP-seq(组蛋白)揭示H3K36me修饰影响温度诱导的植物可变剪接和开花
    细聊.Net Core中IServiceScope的工作方式
  • 原文地址:https://blog.csdn.net/hdq1745/article/details/126812648