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

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

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

二叉树:就是度为2的树

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

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

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

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

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


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

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

P1536 村村通( 村村通 - 洛谷

cpp 复制代码
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;
}
相关推荐
葫三生1 小时前
如何评价《论三生原理》在科技界的地位?
人工智能·算法·机器学习·数学建模·量子计算
智者知已应修善业2 小时前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
拓端研究室3 小时前
视频讲解:门槛效应模型Threshold Effect分析数字金融指数与消费结构数据
前端·算法
随缘而动,随遇而安5 小时前
第八十八篇 大数据中的递归算法:从俄罗斯套娃到分布式计算的奇妙之旅
大数据·数据结构·算法
IT古董5 小时前
【第二章:机器学习与神经网络概述】03.类算法理论与实践-(3)决策树分类器
神经网络·算法·机器学习
sealaugh328 小时前
aws(学习笔记第四十八课) appsync-graphql-dynamodb
笔记·学习·aws
水木兰亭8 小时前
数据结构之——树及树的存储
数据结构·c++·学习·算法
鱼摆摆拜拜9 小时前
第 3 章:神经网络如何学习
人工智能·神经网络·学习
aha-凯心9 小时前
vben 之 axios 封装
前端·javascript·学习
Jess079 小时前
插入排序的简单介绍
数据结构·算法·排序算法