数据结构练习总结4(并查集MFS)
2020-04-02 20:35
99 查看
并查集是用来管理元素分组情况的数据结构,从课件里找的两个图能大致说明。
下面用一个题具体应用一下
某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出,如果A和B是朋友,且B和C是朋友,则A和C也是朋友。请编写程序计算最大朋友圈中有多少人。
输入格式:
输入的第一行包含两个正整数N(≤30000)和M(≤1000),分别代表学校的学生总数和俱乐部的个数。后面的M行每行按以下格式给出1个俱乐部的信息,其中学生从1~N编号:
第i个俱乐部的人数Mi(空格)学生1(空格)学生2 … 学生Mi
输出格式:
输出给出一个整数,表示在最大朋友圈中有多少人。
输入样例:
7 4
3 1 2 3
2 1 4
3 5 6 7
1 6
输出样例:
4
#include <stdio.h> typedef int mfs[10000]; int getconfirstname(mfs set, int v); void checkcon(mfs m); void crtcon(mfs m); void contcon(mfs m, int N); int getconfirstname(mfs m, int v) { for (; m[v] >= 0; v = m[v]); return v; } void checkcon(mfs m) { int a, b; scanf("%d %d\n", &a, &b); int x, y; x = getconfirstname(m, a - 1); y = getconfirstname(m, b - 1); if (x == y) printf("yes\n"); else printf("no\n"); } void crtcon(mfs m) { int a, b; scanf("%d %d\n", &a, &b); int x, y; x = getconfirstname(m, a - 1); y = getconfirstname(m, b - 1); if (x != y) { if (m[x] < m[y]) { m[x] += m[y]; m[y] = x; } else { m[y] += m[x]; m[x] = y; } } } void contcon(mfs m, int N) { int count = 0; for (int i = 0; i < N; i++) { if (m[i] < 0) count++; } if (count == 1) printf("The network is connected.\n"); else printf("There are %d components.\n", count); } int main() { int N; char a; mfs m; scanf("%d\n", &N); for (int i = 0; i < N; i++) { m[i] = -1; } do { scanf("%c", &a); switch (a) { case 'C': checkcon(m); break; case 'I': crtcon(m); break; case 'S': contcon(m, N); break; } } while (a != 'S'); return 0; }
实际上就是数组的下标+1表示对应的元素,而数组元素的值为他的上级节点的下标(上级节点表示与之联通也就是属于同一个集合),如果数组元素的值为负值则表示无上级节点,而且负值的绝对值表示他领导的集合中元素的个数。
相关文章推荐
- 数据结构 之 并查集 总结
- 数据结构 练习 22-并查集以及图的最小生成树
- 算法导论14.2如何扩张数据结构 练习总结
- 清北学堂学习总结 day1 数据结构 练习
- Pandas学习——基础——文件读取与写入、基本数据结构、常用基本函数、排序、总结练习
- c语言数据结构之并查集 总结
- 数据结构总结之并查集
- 【数据结构】【二叉树后序遍历】【非递归实现方法】三种方法总结 浙江大学课程课后练习
- SDAU练习四总结
- 堆栈和队列的数据结构和相关操作总结
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- HDOJ 1053 Huffman编码 自写优先队列的ADT 权当做练习数据结构
- [数据结构]第十章-并查集
- Python数据结构:序列(列表[]、元组())与映射(字典{})语法总结
- 数据结构-排序总结(冒泡 插入 选择 归并)
- Unity3D中常用的数据结构总结与分析
- linux学习总结(数据结构)
- 《数据结构》第二章线性表学习总结
- [数据结构]对链表、栈、队列的总结