并查集学习(836. 合并集合 + 837. 连通块中点的数量)

//得先加集合个数再合并!!!!!!!!! 

核心代码:

int find(int x){
	//返回父节点
	if(x != p[x]) {
		p[x] = find(p[x]);//路径压缩 
	} //孩子不等于爸爸,就找爸爸的爸爸 
	return p[x];
}

题目链接:836 合并集合

#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>

using namespace std;

int n,m;
int p[100010];

void init(){
	for(int i=1;i<=100010;i++){
		p[i] = i;
	}
} 
int find(int x){
	//返回父节点
	if(x != p[x]) {
		p[x] = find(p[x]);//路径压缩 
	} //孩子不等于爸爸,就找爸爸的爸爸 
	return p[x];
}

int main()
{
	init();
	scanf("%d%d",&n,&m);
	//for(int i=1;i<=n;i++){
	//	p[i] = i;
	//}
	while(m--){
		char op[2];
		int a,b;
		scanf("%s%d%d",&op,&a,&b);
		
		if(op[0] == 'M'){
			p[find(a)] = find(b);
		//	int f1 = find(a);
		//	int f2 = find(b);
		//	printf("ffff%d %d\n",f1,f2);
		//	if(f1 == f2) continue;
		//	else{
		//		p[f1] = f2;
		//	} 
		}
		
		else{
			if(find(a) == find(b))
				printf("Yes\n");
			else{
				printf("No\n");
			}
		}
	}
	
	return 0;
}

题目链接:837. 连通块中点的数量

#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>

using namespace std;

int n,m;
int p[100010];
int size1[100010];//连通块里的个数,只保证根节点的size有意义 


int find(int x){
	//返回父节点
	if(x != p[x]) {
		p[x] = find(p[x]);//路径压缩 
	} //孩子不等于爸爸,就找爸爸的爸爸 
	return p[x];
}

int main()
{
	scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
		p[i] = i;
		size1[i] = 1;
	}
	getchar();
	while(m--){
		char op[5];
		int a,b;
		scanf("%s",&op);
		
		if(op[0] == 'C'){
			scanf("%d%d",&a,&b); 
			if(find(a) == find(b)) continue;
			//得先加集合个数再合并!!!!!!!!! 
			size1[find(b)] += size1[find(a)];
			p[find(a)] = find(b);
		}
		else if(op[1] == '1')
		{
				scanf("%d%d",&a,&b); 
				if(find(a) == find(b))
					printf("Yes\n");
				else{
					printf("No\n");
				}			
		}
		else{
			//求连通块的数量,先找父节点
				scanf("%d",&a);
				printf("%d\n",size1[find(a)]);				 
		}
	}
	
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/521039.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot+vue学生宿舍物品存放系统tnozt

需求包括&#xff1a; 三个角色&#xff1a;学生&#xff0c;公寓管理员&#xff08;宿舍管理人员&#xff09;&#xff0c;系统管理员。 本系统基于java语言&#xff0c;结合数据库技术&#xff0c;通过面向对象的设计方法&#xff0c;实现学生信息管理、公寓信息管理、物品存…

STM32外部中断编程相关

一&#xff0c;Nested vectored interrupt controller NVIC即嵌套向量中断控制器&#xff0c;它是内核的器件&#xff0c;M3内核都是支持256个中断&#xff0c;其中包含了16系统中断和240个外部中断&#xff0c;并且具有256级的可编程中断设置。芯片厂商一般不会把内核的这些资…

假期别闲着:REST API实战演练之创建Rest API

1、创建实体类&#xff0c;模拟实体对象 创建一个类&#xff0c;模拟数据数据库来存储数据&#xff0c;这个类就叫Person。 其代码如下&#xff1a; package com.restful;public class Person {private String name;private String about;private int birthYear;public Perso…

MacOS下载和安装HomeBrew的详细教程

在MacOS上安装Homebrew的详细教程如下&#xff1a;&#xff08;参考官网&#xff1a;macOS&#xff08;或 Linux&#xff09;缺失的软件包的管理器 — Homebrew&#xff09; 步骤1&#xff1a;检查系统要求 确保你的MacOS版本至少为macOS Monterey (12) (or higher) 或更高版本…

C语言程序编译全流程,从源代码到二进制

源程序 对于一个最简单的程序&#xff1a; int main(){int a 1;int b 2;int c a b;return 0; }预处理 处理源代码中的宏指令&#xff0c;例如#include等 clang -E test.c处理结果&#xff1a; # 1 "test.c" # 1 "<built-in>" 1 # 1 "&…

【力扣】94. 二叉树的中序遍历、144. 二叉树的前序遍历、145. 二叉树的后序遍历

先序遍历&#xff1a;根-左-右中序遍历&#xff1a;左-根-右后序遍历&#xff1a;左-右-根 94. 二叉树的中序遍历 题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3…

【ControlNet v3版本论文阅读】

网络部分最好有LDM或者Stable Diffusion的基础&#xff0c;有基础的话会看的很轻松 Abstract 1.提出了一种网络结构支持额外输入条件控制大型预训练的扩散模型。利用预训练模型学习一组不同的条件控制。 2.ControlNet对于小型&#xff08;<50k&#xff09;或大型&#xff…

vue项目使用element ui

目录 1、创建一个vue项目 2、找到element官网&#xff0c;点击指南&#xff0c;找到安装栏 3、 找到使用包管理器&#xff0c;复制命令 4、在main.js中引入element 5、使用element ui 6、找到App.vue&#xff0c;导入Button.vue文件&#xff0c;保存启动项目 1、创建一个vu…

千字深度理解:什么是电容的直流偏压特性?

原文来自微信公众号&#xff1a;工程师看海&#xff0c;与我联系&#xff1a;chunhou0820 看海原创视频教程&#xff1a;《运放秘籍》 大家好&#xff0c;我是工程师看海&#xff0c;很久没发千字长文了&#xff0c;原创文章欢迎点赞分享&#xff01; 电容是电路中最常用的被动…

GIt 删除某个特定commit

目的 多次commit&#xff0c;想删掉中间的一个/一些commit 操作方法 一句话说明&#xff1a;利用rebase命令的d表示移除commit的功能&#xff0c;来移除特定的commit # 压缩这3次commit,head~3表示从最近1次commit开始&#xff0c;前3个commit git rebase -i head~3rebase…

nest路由通配符使用

写法 路由路径 ‘ab*cd’ 将匹配 abcd 、ab_cd 、abecd 等。 src/cats/cats.controller.ts import { Controller, Get } from nestjs/common;Controller(cats) export class CatsController {Get(ab*cd)findAll1(): string {return 测试路由通配符;} }效果展示 截图1 截图2 …

蓝桥杯python组真题练习2

目录 1.裁纸刀 2.路径 3.排列字母 4.直线 5.纸张尺寸 1.裁纸刀 11.裁纸刀 - 蓝桥云课 (lanqiao.cn) import os import sys# 请在此输入您的代码sum 4 sum 19 sum 21*20 print(sum) 2.路径 12.路径 - 蓝桥云课 (lanqiao.cn) 这道题涉及到求两个数的最小公倍数。一开始…

企业如何设计和实施有效的网络安全演练?

现实世界中&#xff0c;武装部队一直利用兵棋推演进行实战化训练&#xff0c;为潜在的军事冲突做准备。随着当今的数字化转型&#xff0c;同样的概念正在以网络安全演习的形式在组织中得到应用&#xff0c;很多企业每年都会基于合理的网络攻击场景和事件响应做一些测试和模拟。…

Day:004(1) | Python爬虫:高效数据抓取的编程技术(数据解析)

数据解析-正则表达式 在前面我们已经搞定了怎样获取页面的内容&#xff0c;不过还差一步&#xff0c;这么多杂乱的代码夹杂文字我们怎样 把它提取出来整理呢&#xff1f;下面就开始介绍一个十分强大的工具&#xff0c;正则表达式&#xff01; 正则表达式是对字符串操作的一种…

【Python毕业设计】python基于CatBoost模型的混凝土强度预测研究(源码+数据集+毕业论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

PAC与BTI、MTE的关系

PAC与BTI、MTE的关系如何&#xff1f;标记是否有冲突&#xff1f;

manga-ocr漫画日文ocr

github 下载 解压 anaconda新建环境 conda create -n manga_ocr python3.8 激活环境 conda activate manga_ocr cd到解压目录 cd /d manga-ocr-master 安装依赖包 pip install -r requirements.txt pip3 install manga-ocr 下载离线model huggingface 123云盘 解压到一个目录…

蓝桥真题--路径之谜DFS解法

路径之谜 思路 前置知识&#xff1a;深度搜索模板搜索所有可以找的路径&#xff0c;将走过的靶子减去一走到最后一个格子的时候&#xff0c;直接去判断所有的靶子只有除最后一个位置的靶子&#xff0c;其余靶子都归零的时候&#xff0c;判断一个最后一个位置横坐标和纵坐标的靶…

Stale Diffusion、Drag Your Noise、PhysReaction、CityGaussian

本文首发于公众号&#xff1a;机器感知 Stale Diffusion、Drag Your Noise、PhysReaction、CityGaussian Drag Your Noise: Interactive Point-based Editing via Diffusion Semantic Propagation Point-based interactive editing serves as an essential tool to compleme…

爬虫 新闻网站 以湖南法治报为例(含详细注释) V1.0

目标网站&#xff1a;湖南法治报 爬取目的&#xff1a;为了获取某一地区更全面的在湖南法治报已发布的宣传新闻稿&#xff0c;同时也让自己的工作更便捷 环境&#xff1a;Pycharm2021&#xff0c;Python3.10&#xff0c; 安装的包&#xff1a;requests&#xff0c;csv&#xff…