解题思路:
1. 在 main 函数中,首先定义了两个整数 n 和 m 用于存储关系的数量和节点的数量。
2. 定义了一个整数数组 root ,初始时 root[i] = i ,表示每个节点的根节点初始为自身。
3. 定义变量 count 用于统计冗余关系的数量。
4. 通过一个循环读取 n 组关系。对于每组关系中的两个节点 x 和 y ,通过循环找到它们的根节点。
5. 如果 x 和 y 的根节点相同,说明这组关系是冗余的,增加 count 的值。
6. 如果根节点不同,则将 y 的根节点设置为 x ,将它们合并到同一个集合中。
7. 最后输出冗余关系的数量 count 。
注意事项:冗余关系”指的是在已经存在的关系集合中,新输入的两个节点之间的关系已经可以通过之前已有的关系推导出来。比如说,如果之前已经确定节点 A 和节点 B 有关系,节点 B 和节点 C 有关系,那么当新输入节点 A 和节点 C 的关系时,就可以认为这是一种冗余关系,因为 A 和 C 之间的关联可以通过之前的关系间接得出。简单来说,就是重复或者不必要的、可以从已有的关系中推断出来的关系。
参考代码
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
int n = 0, m = 0;
scanf("%d %d", &n, &m);
int root[m + 1];
root[0] = 0;
int count = 0;
for (int i = 1; i < m + 1; ++i) {
root[i] = i;
}
for (int i = 0; i < n; ++i) {
int x = 0, y = 0;
scanf("%d %d", &x, &y);
while (root[x] != x) {
x = root[x];
}
while (root[y] != y) {
y = root[y];
}
if (x == y) {
count++;
} else {
root[y] = x;
}
}
printf("%d", count);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复