当前位置: 首页 > news >正文

L2-024 部落 #GPLT,并查集 C++

文章目录

  • 题目解读
    • 输入格式
    • 输出格式
  • 思路
  • Ac Code
  • 参考


题目解读

我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查任意两个人是否属于同一个部落。

输入格式

第一行给出一个正整数N(≤104),是已知小圈子的个数。
随后N行,每行按一下格式给出一个小圈子里的人:
K P[1] P[2] ⋯ P[K] 其中K是小圈子里的人数,P[i](i=1,⋯,K)是小圈子里每个人的编号。这里所有人的编号从1开始连续编号,最大编号不会超过104
之后一行给出一个非负整数Q,随后Q行,每行给出一对儿被查询的人的编号

输出格式

首先在一行中输出这个社区的总人数、以及互不相交的部落的个数。随后对每一次查询,如果他们属于同一个部落,则在一行中输出Y,否则输出N。

思路

使用并查集,将每个圈子的第一个人作为父节点,在合并集合的过程当中,统计人的个数,最后根节点的个数就是圈子的个数,而查询是否属于同一个圈子是并查集的基本应用

Ac Code

#include<bits/stdc++.h>

using namespace std;

//最多这么多人 
const int N = 1e4+10;
int f[N];
 
//先写并查集板子
int find(int u){
	if(f[u]!=u)f[u]=find(f[u]);
	return f[u];
} 

void merge(int a,int b){
	int aa=find(a),bb =find(b);
	
	if(aa!=bb)f[aa]=bb;
}

bool judge(int a,int b){
	return find(a)==find(b);
}
 
int main(){
	int n;
	cin >> n;
	
	map<int,bool> mp;//存储状态 
	
	for(int i=0; i<N; i++)f[i]=i;
	
	for(int i=0; i<n; i++){
		int k;
		cin >> k;
		int fa;
		for(int j=0; j<k; j++){
			if(j==0){
				cin>>fa;
				if(mp.count(fa)==0)mp[fa]=1;
			}else{
				int x;
				cin >> x;
				if(mp.count(x)==0)mp[x]=1;
				merge(x,fa);
			}
		} 
	}
	
	cout<<mp.size()<<" ";
	int res=0;
	for(int i=0; i<N; i++){
		//这个人需要先存在 
		if(mp.count(i) != 0 && f[i]==i)res++;
	} 
	cout<<res<<endl;
	
	int q;
	cin >> q;
	while(q--){
		int a,b;
		cin >> a >> b;
		
		if(judge(a,b))cout<<"Y";
		else cout<<"N";
		cout << endl;
	} 
	
	return 0;
}

参考

B站up主,一天能吃五顿饭


🌻编写本篇文章目的是笔者想以输出的形式进行学习,顺便记录学习点滴🌻

🌹 如果本篇文章对你有帮助的话那就点个赞吧👍🌹

😇 本篇文章可能存在多处不足,如有修改意见,可以私信或者评论我哦 😇


在这里插入图片描述

http://www.dtcms.com/a/113330.html

相关文章:

  • 智能驾驶中预测模块简介
  • 广州t11基地顺利完成交割,TCL华星技术产能双升级
  • 【java】Class.newInstance()
  • 硬币找零问题
  • 特征值与特征向量:从理论到应用的全面解析
  • Java类加载问题
  • STM32单片机入门学习——第16节: [6-4] PWM驱动LED呼吸灯PWM驱动舵机PWM驱动直流电机
  • 《AI大模型应知应会100篇》第4篇:Transformer架构深入浅出:大模型的基石
  • cadence17.4和16.6同时安装无法使用的问题
  • 关于图片分类任务的猜想 | 撰写论文 paper
  • .net多贸易公司借入借出归还设备进销存管理系统软件租金计算库存管理
  • M芯片,能运行普通应用程序的原架构虚拟机
  • Java的Selenium元素定位-xpath
  • LeetCode热题100记录-【二叉树】
  • 【Deep Reinforcement Learning Hands-On Third Edition】【第1章:什么是强化学习】
  • 《海空重力测量理论方法及应用》之一重力仪系统组成及工作原理(下)
  • qt designer 软件主题程序设计
  • Python精进系列:从 __name__ 开始了解 python 常见内置变量
  • synchronized 锁升级机制详解
  • ROS2 多机时间同步(Chrony配置简明指南)
  • docker本地部署anythingllm
  • C++重载运算符的本质
  • 将 DataFrame 中某一列的列表拆分成多个独立的列的方式
  • Linux上位机开发实践(做一专多能的方案提供者)
  • 从情感分析到朴素贝叶斯法:基于朴素贝叶斯的情感分析如何让DeepSeek赋能你的工作?
  • 【Kubernetes】RBAC(基于角色的访问控制)如何设置?如何管理 Kubernetes 的权限?
  • MCP 极简入门 - 三分钟 Cline + Smithery 运行 time 服务
  • HTTP/2:新一代网络协议的变革与优势
  • 借 DCMM 东风,提升数据管理价值生产力
  • BugKu Simple_SSTI_2