首页 > 【模板】并查集
头像 borwin
发表于 2024-02-27 00:54:34
(模板)并查集 题目描述: 体育课上,体育老师牛牛弄不清学生们都是哪个班级的,他只能随便找两个同学,问他们是不是一个班的,牛牛记下了属于同一个班的学生的序号,但是他弄不清自己教的班级的情况,请你帮助他。 假设体育老师的学生有n人,学号分别是1,2,...n,他的小本本记录了m行,每行记下了属于一个班 展开全文
头像 雪地烤鹅
发表于 2024-11-24 11:39:57
考虑到题目需要求出人数最多的班级,也就是秩最大的班级,引入ranks数组记录,同时小挂大似乎也是一种优化,最后的班级数量再来一遍遍历,如果父节点是自身,说明它就是该集合的父节点(已经使用了路径压缩) #include<bits/stdc++.h> using namespace std; 展开全文
头像 2004
发表于 2025-05-04 14:33:08
#include<iostream> using namespace std; const int N = 1e5+10; int f[N],g[N]; int find(int x) { if(f[x]!=x) return f[x]=find(f[x]); els 展开全文
头像 牛客579577851号
发表于 2024-03-14 10:43:15
使用并查集,来记录所有人的关系 再将每个人的顶送入set中,set的长度就是班级数量 再用一个循环找到最大班级即可 #include <bits/stdc++.h> using namespace std; const int N = 100010; int st[N], f[N], 展开全文

等你来战

查看全部