python 蓝桥杯之并查集

文章目录

  • 总述
  • 合并过程
  • 查找过程
  • 算法实战
    • 实战1

总述

并查集(Disjoint-set Union,简称并查集)是一种用来管理元素分组情况的数据结构。它主要用于解决集合的合并与查询问题,通常涉及到以下两种操作:

  1. 合并(Union): 将两个集合合并成一个集合。
  2. 查询(Find): 查找某个元素所属的集合。

并查集通常应用于解决连接问题,如判断无向图中的连通分量、网络连接状态的判断、社交网络中的好友关系等。在算法竞赛和数据结构课程中也经常会涉及到并查集的应用场景,比如 Kruskal 算法中的边权值排序,以及求解最小生成树等。

合并过程

在这里插入图片描述

在这里插入图片描述

  • 合并的过程就是先找到两个元素的根,若根不相同则将其中的一个根的父节点改成另一个根节点
s = [i for i in range(N+1)]  # 列表s[i] 表示i 节点的父节点,开始的时候,全部指向自己
def union(x,y):r1 = find(x)r2 = find(y)if r1 != r2:s[r1] = s[r2]

查找过程

在这里插入图片描述

  • 对于查找的过程,就是一直找
def find(x):  # 返回 x 的根节点if x != s[x]:s[x] = find(s[x])return s[x]

算法实战

实战1

在这里插入图片描述
在这里插入图片描述

from collections import defaultdictn = int(input())
p = [i for i in range(n + 1)] # p[i] 表示 节点 i 的父节点
tree = defaultdict(list) # 输入键,当键不存在就生成键:列表
used = [0] * (n + 1) # 用来记录是否访问过
ans = [0] * n  # 用来反复记录路径def find(x):    # 并查集的查找函数,返回x 节点的根if x != p[x]:p[x] = find(p[x])return p[x]def dfs(pos, idx):ans[idx] = posif pos == end:res = sorted(ans[:idx + 1]) # 排序print(' '.join(map(str, res))) # 输出,间隔空格输出 returnfor d in tree[pos]: # 逐一访问节点的邻接节点if not used[d]: # 由于是无向图,并且加上深度搜索,所以要记录一个节点是否已经访问过used[d] = 1dfs(d, idx + 1)for _ in range(n):u, v = map(int, input().split()) tu, tv = find(u), find(v) if tu == tv:start, end = u, v  break  # 所以是不必加载全部的边的关系的,因为当两个输入的节点的根相同的时候,就说明已经包含环了else:p[tv] = tutree[u].append(v)tree[v].append(u) # 无向图used[start] = 1
dfs(start, 0) 

代码分析

  • 不能直接暴力地去深度搜索,会超时
  • 用并查集来判断两个节点是否位于不同的连通分支
  • 并查集并不是死板地运用全部的合并和查找函数
  • 深度搜索只是一种工具并不是死板地运用全部的框架

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud基础

SpringCloud基础环境 1、基本环境版本选择 Java: Java17;spring cloud:2023.0.0;spring boot:3.2.0;cloud alibaba:2022.0.0.0-RC2;Maven:3.9;Mysql&#x…

Spring Boot 中使用 Redis + Aop 进行限流

Spring Boot 中使用 Redis 进行限流,通常你可以采用如下几种方式: 令牌桶算法(Token Bucket)漏桶算法(Leaky Bucket)固定窗口计数器(Fixed Window Counter)滑动日志窗口&#xff08…

“ReferenceError: AMap is not defined“

问题 笔者进行web开发&#xff0c;引入高德地图&#xff0c;控制台报错 "ReferenceError: AMap is not defined"详细问题 vue.runtime.esm.js:4662 [Vue warn]: Error in mounted hook: "ReferenceError: AMap is not defined"found in---> <Map&…

使用Windows API实现一个简单的串口助手

使用Windows API实现一个简单的串口助手 目录 使用window API开发一个具有字符串收发功能的串口助手 开发环境串口设备相关的API步骤实现代码收发测试图 使用window API开发一个具有字符串收发功能的串口助手 开发环境 Visual Studio 2015 串口设备相关的API CreateFile 参…

【LGR-177-Div.3】洛谷基础赛 #8 Westlake OI #1(仅A)

String Minimization a尽可能小的话&#xff0c;如果能和c交换更小就交换。 如果a和c相等&#xff0c;b交换能更小&#xff0c;就交换b。 #include <bits/stdc.h> //#define int long long #define per(i,j,k) for(int (i)(j);(i)<(k);(i)) #define rep(i,j,k) for(…

数据库系统原理实验报告1 | E-R图设计

整理自博主2021级专业课《数据库系统原理》自己完成的实验报告。 目录 一、实验目的 二、实验内容 1、某个学校有若干个系 2、某工厂生产若干产品 3、某学校的田径运动会中设置了各类比赛 4、自己调查一个需要提供开发数据库应用系统的单位 三、实验结果总结 四、实验结…

爬虫练习:获取某招聘网站Python岗位信息

一、相关网站 二、相关代码 import requests from lxml import etree import csv with open(拉钩Python岗位数据.csv, w, newline, encodingutf-8) as csvfile:fieldnames [公司, 规模,岗位,地区,薪资,经验要求]writer csv.DictWriter(csvfile, fieldnamesfieldnames)writer…

海外媒体宣发套餐如何利用3种方式洞察市场-华媒舍

在当今数字化时代&#xff0c;媒体宣发成为了企业推广产品和品牌的重要手段之一。其中&#xff0c;7FT媒体宣发套餐是一种常用而有效的宣传方式。本文将介绍这种媒体宣发套餐&#xff0c;以及如何利用它来洞察市场。 一、关键概念 在深入讨论7FT媒体宣发套餐之前&#xff0c;让…

day16_购物车(添加购物车,购物车列表查询,删除购物车商品,更新选中商品状态,完成购物车商品的全选,清空购物车)

文章目录 购物车模块1 需求说明2 环境搭建3 添加购物车3.1 需求说明3.2 远程调用接口开发3.2.1 ProductController3.2.2 ProductService 3.3 openFeign接口定义3.3.1 环境搭建3.3.2 接口定义3.3.3 降级类定义 3.4 业务后端接口开发3.4.1 添加依赖3.4.2 修改启动类3.4.3 CartInf…

vmware添加新磁盘

文章目录 前言一、新增磁盘二、初始化磁盘1.查看2.初始化3.挂载 总结 前言 虚拟机磁盘空间很散乱&#xff0c;大部分都在/root和/home下不好操作&#xff0c;故考虑新增磁盘、增加挂载点。 一、新增磁盘 右键打开虚拟机设置 二、初始化磁盘 1.查看 fdisk -l2.初始化 …

分布式执行引擎ray入门--(3)Ray Train

Ray Train中包含4个部分 Training function: 包含训练模型逻辑的函数 Worker: 用来跑训练的 Scaling configuration: 配置 Trainer: 协调以上三个部分 Ray TrainPyTorch 这一块比较建议直接去官网看diff&#xff0c;官网色块标注的比较清晰&#xff0c;非常直观。 impor…

CentOS 8启动流程

一、BIOS与UEFI BIOS Basic Input Output System的缩写&#xff0c;翻译过来就是“基本输入输出系统”&#xff0c;是一种业界标准的固件接口&#xff0c;第一次出现在1975年&#xff0c;是计算机启动时加载的第一个程序&#xff0c;主要功能是检测和设置计算机硬件&#xff…