2023/1/2总结

news2024/9/21 0:36:39

今天AC了三个有关二叉树的题目:

P1827 [USACO3.4] 美国血统 American Heritage_lxh0113的博客-CSDN博客

https://blog.csdn.net/lxh0113/article/details/128522831?spm=1001.2014.3001.5502

P1030 [NOIP2001 普及组] 求先序排列_lxh0113的博客-CSDN博客

然后学习了并查集的相关内容:

并查集

并查集是什么,简而言之,就是——有关集合的合并,查找(找自己是属于哪一个集合)

并查集,就我目前接触的而言,我是在kruskal算法中看到了是比较重要的。

并查集有几个重要的函数:(下面所说的“爹”指的是所属集合的代号)

  1. 找“爹”
  2. 合并“爹”

首先我们要做的是初始化,刚开始大家都是自己属于自己的那个小小集合的,所以我们需要把他们赋值。我们通常是不从0开始(那样子处理起来会有点麻烦,都一样,但是我们习惯从1开始数集合)

代码如下:

找爹,就是找到自己所属的集合。这边我使用的是靠左原则,什么叫靠左原则,就是说如果遇到俩个集合是不同的“爹”,他们需要合并,那么我们默认把右边的归顺到左边。也就是改右边的“爹”到左边的,以左边先出现为大。

为什么要找“爹”呢,因为这是我们判断他们是否在同一个集合的标准,如果他们在同一个集合在实际应用中会使顶点成环。这是我们所不希望看见的。“爹”是告诉我们他们同属的集合。

代码非常简单

但是这短短的几行代码,可是做了不少事情。getfather语句第二行if(a[x]==x) return x;我们知道靠左原则,也就是说右边始终会归顺左边,而左边是爹,左边的值不会变的,所以我们知道当我们遇到a[x]==x就是说等于它本身的时候,那么这个就是最高等级的爹。而如果不是,我们需要执行下面else后的语句。k=getfather(a[x]);return a[k];这俩句话,第一句话很明显是找到最终的爹,为什么说是最终的,因为我们可能会出现下面这种情况:

 

上面的圆形代表是几号元素,下面代表他们的爹。现在我们要合并2号和3号。1号2号元素已经在1号的集合里面了,而3号元素的爹是它自己,我们就需要找到2号元素最终的爹,因为2号元素他的爹不是自己我们要代入下一次找得下标就是a[1],就是2号下面所显示的元素。所以就有了递归,把2号当前的值改成最终的(因为我们在合并的时候,很可能要历经好几次,我们在找的时候最好改一下最终“爹”,保证下次递归会减少次数),而下面的return a[k]语句就是会返回最终答案。

合并爹,其实就是合并集合拉啦,这个也是几行代码:

 

这个代码的核心思想是,找到x,y元素对应的最终“爹”。然后  把y所对应的最终爹  改成   x所对应的最终爹。

因为只要改了爹,然后最终的爹会到一个集合当中。

最后还有一个很重要的代码部分,就是我们需要知道这里面有几个集合,聪明的你肯定想到了,只要数出当前元素和其值是否相等即可。代码如下:

#include<stdio.h>
#define N 100
int a[N],m,n,b[N][2];

int getfather(int x)
{
	int k;
	if(a[x]==x) return x;
	else 
	{
		k=getfather(a[x]);
		return a[k];
	}	
}

int mergefather(int x,int y)
{
	int p,q;
	p=getfather(x);
	q=getfather(y);
	if(p!=q)
	{
		a[q]=p;
	}
}

int main()
{
	int i,count=0;
	puts("输入你所要的总数:");
	scanf("%d",&n);
	
	for(i=1;i<=n;i++)
		a[i]=i;

	puts("输入总的线索:");
	scanf("%d",&m);
	puts("输入谁和谁是一起的:");
	for(i=0;i<m;i++)
	{
		scanf("%d%d",&b[i][0],&b[i][1]);
	}
	for(i=0;i<m;i++)
	{
		mergefather(b[i][0],b[i][1]);
	}
	
	for(i=1;i<=n;i++)
	{
		if(a[i]==i) count++;
	}
	printf("%d ",count);
	
	return 0;
}

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web基础标签

标签分类&#xff1a; 文本标签&#xff1a; 文本标题标签&#xff1a;h1---h6 段落标签&#xff1a; p 水平线&#xff1a; <hr/> 换行符&#xff1a; <br/> 转义字符&#xff1a; 注释标签&#xff1a; <!--注释内容--> 无语义标签&#xff1a; 语义标签…

educoder数据结构与算法 线性表 第1关:实现一个顺序存储的线性表

本文已收录于专栏 &#x1f332;《educoder数据结构与算法_大耳朵宋宋的博客-CSDN博客》&#x1f332; &#x1f350;任务描述&#x1f350; 本关任务&#xff1a;实现 step1/Seqlist.cpp 中的SL_InsAt、SL_DelAt和SL_DelValue三个操作函数&#xff0c;以实现线性表中数据的插…

TypeScript中abstract抽象类、抽象成员

TypeScript也支持定义抽象类和抽象类成员。抽象类和抽象类成员都使用abstract关键字来定义 抽象类可以不包含抽象方法&#xff0c;但抽象方法必须存在于抽象类中抽象方法只能定义&#xff0c;不能实现&#xff0c;即没有函数体抽象类不能被直接使用&#xff0c;只能被继承&…

Spring Boot学习篇(五)

Spring Boot学习篇(五) mybatis-plus使用 1.1 配置pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:s…

《设计模式》代理模式

《设计模式》设计模式的基本原则 《设计模式》单例模式 《设计模式》工厂模式 《设计模式》原型模式 《设计模式》建造者模式 《设计模式》适配器模式 《设计模式》桥接模式 《设计模式》装饰者模式 《设计模式》组合模式 《设计模式》外观模式 《设计模式》享元模式 《设计模式…

HTML5和CSS3 WEB技术开发

HTML5和CSS3 WEB技术开发 B站视频参考&#xff1a;https://www.bilibili.com/video/BV1H44y1k7ze/ 课程目标&#xff1a; 使用HTML5进行网站布局使用CSS3进行网站美化开发精美的商业网站 第一章 HTML5基础 概念&#xff1a; ​ 网页 &#xff1a;互联网的基础&#xff0c;网…

requests请求库(爬取)

文章目录requests模块链接拼接&#xff08;params参数&#xff09;UA伪装&#xff08;headers参数&#xff09;POST请求页面局部信息爬取&#xff08;GET&#xff09;爬取国家药品监督管理监督总局中基于中华人民共和国化妆品生产许可证相关数据爬取图片爬虫分类通用爬虫&#…

分布式存储从FastDFS切换到Minio

什么是Minio 基于官网的介绍如下&#xff1a;MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。 从官网的介绍可以看出Minio是一款和FastDFS类似的工具&#xff0c;分布式存储系统。目前在使…

运行MAT项目环境配置中出现的问题及参考方案

MAT项目是用于修复图片中缺失的部分&#xff1a;及为图像中缺失的区域产生视觉吸引力和语义适当的内容。 项目链接&#xff1a;GitHub - fenglinglwb/MAT: MAT: Mask-Aware Transformer for Large Hole Image InpaintingMAT: Mask-Aware Transformer for Large Hole Image Inp…

国内有没有可以全职远程办公的程序员工作?

明作为一个曾经靠兼职开发远程办公来赚钱的程序员&#xff0c;既碰到过无良甲方&#xff0c;开发完了不结尾款&#xff0c;最后通过法律手段才解决问题&#xff1b;也接过自称甲方的中介单&#xff0c;耗费心力拿到尾款&#xff0c;最后发现人家拿的钱比自己还多......这一路兼…

方格取数--数字三角形dp问题

项目场景&#xff1a; 线性dp 数字三角形类问题 问题描述 设有 NN 的方格图&#xff0c;我们在其中的某些方格中填入正整数&#xff0c;而其它的方格中则放入数字0。如下图所示&#xff1a; 某人从图中的左上角 A 出发&#xff0c;可以向下行走&#xff0c;也可以向右行走&am…

WebGL及Threejs学习介绍

一、学习背景及实现的效果 这十年来Web得到了飞速的发展&#xff0c;随着WebGL的普及&#xff0c;网页的表现能力越来越强大&#xff0c;网页上已经可以开始做出很多复杂的动画、精美的效果&#xff1b;还能通过WebGL在网页中绘制高性能的3d图形。随着浏览器的性能和网络、带宽…

github实用搜索技巧

github搜索指令教程一. in:根据某个关键词来进行检索1.关键词:name: 项目名称description : 项目描述readme : 项目帮助文档语法 &#xff1a;language:xx(检索什么语言的内容)组合检索二.根据stars||forks||pushed关键字查找1.数量范围: xxx关键词 stars:>或者:<2.区间范…

Pytorch 数据操作

神经网络所处理的数据类型都为tensor类型数据&#xff0c;我们首先需要导入库torch import torch 使用 arange 创建一个行向量 x。这个行向量包含以0开始的前12个整数&#xff0c;它们默认创建为整数。除非额外指定&#xff0c;新的张量将存储在内存中&#xff0c;并采用基于…

进程替换心得

进程替换 1️⃣ 什么是进程替换 1.我们想让子进程不执行父进程部分代码&#xff0c;执行新的程序时我们需要进行进程替换。 ** 程序替换的原理 ** &#xff1a; 将磁盘中的程序&#xff0c;加载入内存结构。重新建立页表映射&#xff0c;谁执行程序替换就程序建立谁的映射(子…

redis 的 java 客户端

Jedis 客户端 1&#xff09;引入依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…

【Vim】Vim 常用编辑操作

目录 正则表达式 vim 命令 vim的工作模式 撤销修改、重做与保存 光标移动命令 文本插入操作 文本删除操作 文本复制、剪切与粘贴 文本的修改与替换 多窗口操作 正则表达式 简单地说&#xff0c;正则表达式是一种符号表示法&#xff0c;用于识别文本模式。在某种程度上…

Python--栈与队列的相互实现

我们都知道这两个数据结构很相似,但是又有差别, 就好像是对立统一的一样. 栈是一种后进先出的数据结构&#xff0c;元素从顶端入栈&#xff0c;然后从顶端出栈。 队列是一种先进先出的数据结构&#xff0c;元素从后端入队&#xff0c;然后从前端出队。 首先我们都知道用Python的…

leetcode--动态规划问题

动态规划1.基本动态规划 一维&#xff08;1&#xff09;爬楼梯(70)&#xff08;2&#xff09;打家劫舍(198)&#xff08;3&#xff09;等差数列划分(413)2.基本动态规划 二维&#xff08;1&#xff09;最小路径和(64)&#xff08;2&#xff09;01 矩阵(542)&#xff08;3&#…

02SpringCloudAlibaba服务注册中心—Eureka

推荐与对比观看&#xff1a;003SpringCloud---Eureka_gh_xiaohe的博客-CSDN博客 服务提供者 1、 2、pom.xml 3、改yum 4、主启动 5、业务类 测试1&#xff1a; 访问&#xff1a; 服务消费者 1、 2、pom.xml 3、改yum 4、主启动 5、业务类 config controller 测…