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

树的基本概念,并查集复习(学习记录)

今天主要学习的是树,然后利用题目复习了一下并查集。

树的一些概念词,度,父节点(双亲节点),子节点,树的深度(高度)等等。

二叉树:就是度为2的树

学了前序,中序,后序,简单用代码实现前序(核心我觉得是构建树,在C语言的代码中,就是利用结构体来表示一棵树)

前序,中序,后序的意思也很容易理解

举前序的例子,前序其实就是先 根,再左子树,再右子树。(所以其实前序也被称为先根)

中序:左子树,根,右子树

后序;左子树,右子树,根


下面是今天并查集的复习:

代码的逻辑很清楚,题目思考的步骤也有,便于回顾和复习

P1536 村村通(村村通 - 洛谷

P1536 村村通
我的思路:
1. 设每条路的端点的门主都是自己
2. 改变现有路的端点的门主,统一门主
3. 查找每个端点的门主是否都是之前统一的门主,如果不是,就+1条路

一把过,稳稳的很安心!
#include<stdio.h>
int pre[100001];

int find(int x) {
	if (pre[x] == x) {
		return x;
	}
	return pre[x] = find(pre[x]);
	
}

int join(int a, int b) {
	//找到门主
	int fx = find(a);
	int fy = find(b);
	//统一门主
	pre[fx] = fy;
	
}

int main() {
	int n = 0;//城镇
	int m = 0;//道路
	
	int a, b = 0;
	scanf("%d", &n);
	while (n != 0) {
		int ans = 0;//还要修几条路
		scanf("%d", &m);
		//将每条路的门主都设为自己
		for (int i = 1; i <= n; i++) {
			pre[i] = i;
		}
		for (int i = 1; i <= m; i++) {
			scanf("%d%d", &a, &b);
			//将路的端点的门主统一
			join(a, b);
		}
		for (int i = 1; i <= n; i++) {
			if (pre[i] == i) {
				ans++;
			}
		}
		printf("%d\n", ans - 1);
		scanf("%d", &n);
	}
	return 0;
}


http://www.kler.cn/a/535175.html

相关文章:

  • 19C RAC在vmware虚拟机环境下的安装
  • 【创建模式-单例模式(Singleton Pattern)】
  • Spring Boot 2 快速教程:WebFlux优缺点及性能分析(四)
  • 图论常见算法
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter3-语言基础
  • PyQt6/PySide6 的 QMainWindow 类
  • Unity3D仿星露谷物语开发小结1
  • 乒乓日常烧拍日记之五在吐槽中找缺陷
  • deepseek API 调用-golang
  • Continue 与 CodeGPT 插件 的对比分析
  • 22、Java 函数式编程:开启高效编程新境界
  • 【csp/信奥赛C++语法学习如何入门?】
  • 关于视频字幕
  • 如何用GISBox将高斯泼溅文件(PLY/Splat)转换为3DTiles?全流程解析
  • Ubuntu安装OpenSSF Scorecard
  • GRN前沿:STGRNS:一种基于transformer的可解释方法,用于从单细胞转录组数据推断基因调控网络
  • centos 7.6 安装mysql实用方案
  • 《具身智能时代:机器人具身抓取技术的前沿探索与应用综述》
  • 代码随想录算法训练营第二十九天| 回溯算法02
  • 关于React前端
  • UE5 蓝图学习计划 - Day 13:确定游戏类型与核心功能
  • Android 9.0 mtk默认浏览器Browser下载app不能安装问题的解决办法
  • Flutter的绘制流程
  • [Unity角色控制专题] 详细说明如何使用Character Controller配合脚本实现类似MC的第一人称控制(仅移动与视角摇晃)
  • C++《AVL树》
  • 一文解释nn、nn.Module与nn.functional的用法与区别