• 2024-11-21线段树分治
    线段树分治可以将“一段时间”的条件统筹处理。一种理解方法是考虑暴力,在每个时间点将当前状态调整出来,线段树分治做的事情相当于将一段时间内都有效的信息统一处理,当这个信息不再满足的时候就撤销。具体地,若一个条件(通常是可以用并查集维护的)在时间\([l,r]\)内有效,我们可以对
  • 2024-11-21Python算法模版——并查集
        并查集常用于与图或树相关的算法题中,一个最为经典应用场景是求无向图的连通分量,为方便大家使用并查集算法,这里为大家提供一个Python的并查集算法模版,并加有详细注释。classUnionFind:def__init__(self,n):#n代表总共有n个节点,初始时每个节点以
  • 2024-11-19Luogu P9869 NOIp2023 三值逻辑 题解 [ 绿 ] [ 带权并查集 ]
    三值逻辑:有点坑并且细节较繁琐,但有点板子的并查集。修改操作发现对于每个点,只有对他的最后一次操作才是有用的,所以记录下最终的祖先即可。然而这里并不能用并查集来实现,因为并查集它具有的是传递性,无论你路不路径压缩,每次修改一个父节点时它的子节点一定会被修改,所以我们不能使
  • 2024-11-191021 Deepest Root(树的直径、bfs/dfs、并查集)
     先通过并查集判断有几个连通图,如果只有一张图,那就用两次dfs/bfs来找到树的直径上的所有端点1#include<bits/stdc++.h>2usingnamespacestd;3intn;4vector<int>edges[10005];5boolvisited[10005]={false};6set<int>temp;//记录该次dfs筛选出树直径
  • 2024-11-16倒序处理、并查集
    倒序处理[USACO22JAN]FarmUpdatesG题目描述FarmerJohn经营着总共NNN个农场(1≤
  • 2024-11-13食物链(并查集)
    题目:https://ac.nowcoder.com/acm/contest/22904/1024思路:这道题网络上有很多思路,可以开三个并查集,可以使用带权并查集,但是有一个大佬的思路是这样的,将总结点的数量增加到3n个,把整个节点区域分为n,2*n,3*n三个部分,我们可以物种a的一个节点对应物种b的两个节点,如果是同类,我们就把他
  • 2024-11-11并查集+最小生成树 学习笔记+杂题 2
    图论系列:前言:相关题单:戳我算法讲解:戳我CF1829ETheLakes给定一张\(n*m\)的矩阵,询问正整数四联通块权值和的最大值。并查集维护即可,记录一下集合内的点的权值和。代码:constintM=1005;intT,n,m,ans;inta[M][M],fa[M*M],siz[M*M];intfx[5]={0,1,-1,0,0};intfy[5]
  • 2024-11-10并查集+最小生成树 学习笔记+杂题 1
    图论系列:前言:相关题单:戳我算法讲解:戳我代码可能过多啊,到时候页面别卡死了,所以就把代码最前面的缺省源删了(反正就是几个头文件/defineintlonglong,自己加一下即可)。并查集记得初始化,最小生成树记得排序。P3367【模板】并查集板子题,给定\(n\)个元素,有2种操作,一种合并,
  • 2024-11-10并查集 How many tables(hdu 1213) How many answers are wrong(hdu 3038)
    目录前言并查集  并查集的初始化  并查集的合并  并查集合并的优化,路径压缩Howmanytables(hdu1213)  问题描述  输入  输出问题分析代码带权并查集Howmanyanswersarewrong(hdu3038)  问题描述  输入  输出问题分析代码
  • 2024-11-10并查集+最小生成树 学习笔记
    图论系列:前言:咲いた野の花よああどうか教えておくれ人は何故傷つけあって争うのでしょう相关题单:题单1题单2题单3题单4一.并查集1.基础定义与操作(1)定义并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节点表示对应集合中的
  • 2024-11-09并查集(原理、实现、应用)
    一、原理在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(union-find
  • 2024-11-07c++ Kruskal 最小生成树 (MST) 算法(Kruskal’s Minimum Spanning Tree (MST) Algorithm)
            对于加权、连通、无向图,最小生成树(MST)或最小权重生成树是权重小于或等于其他所有生成树权重的生成树。Kruskal算法简介:        在这里,我们将讨论Kruskal算法来查找给定加权图的MST。         在Kruskal算法中,按升序对给定图的所有
  • 2024-11-07JavaScript Kruskal 最小生成树 (MST) 算法(Kruskal’s Minimum Spanning Tree (MST) Algorithm)
             对于加权、连通、无向图,最小生成树(MST)或最小权重生成树是权重小于或等于其他所有生成树权重的生成树。Kruskal算法简介:        在这里,我们将讨论Kruskal算法来查找给定加权图的MST。         在Kruskal算法中,按升序对给定图的所
  • 2024-11-05堆的应用
    T1:每次找到最小的堆,与次小的合并即可T2:简单题,直接口胡了考虑转化成几个大小关系然后只要每次将队列首插入堆中即可T3:显然字典序满足贪心性质每次用堆来维护没被取的最大值,然后取出它再在后面的元素上打一个懒标记视为已去过,用链表来维护该元素后面一个元素即可T4:呃呃呃
  • 2024-11-04并查集应用:判圈
    并查集应用:判圈Description第一行输入正整数n,m,q表示一个有n个点m条边的无向图。q表示有q次询问。接下来m行有m条边。每行两个u,v属于[1,n]范围的正整数,表示u,v之间有边。接下来q行,每行两个点u,v,属于[1,n]。如果(u,v)这条边已经存在或者如果加入这条边后会产生新的环,则输出
  • 2024-11-02并查集
    种类并查集P2024[NOI2001]食物链类似于超级源点,把\(x+n\)丢进集合里,相当于\(x\)对这个集合作了标记,方便维护细节注意\(x\toy\),对于\(y\toz\),会有\(z\tox\)这里会出现自己和自己连边的情况,用\(fa[rt]=0\)的写法需要特判P6008[USACO20JAN]CavePaintingsP主要考察思
  • 2024-11-01并查集---Linux发行版的数量
    题目描述Linux操作系统有多个发行版,distrowatch.com提供了各个发行版的资料。这些发行版互相存在关联,例如Ubuntu基于Debian开发,而Mint又基于Ubuntu开发,那么我们认为Mint同Debian也存在关联。发行版集是一个或多个相关存在关联的操作系统发行版,集合内不包含没有关联的发行
  • 2024-11-01计蒜客:修建大桥(并查集/DFS/BFS)
     找到有几张连通图即可解决问题。DFS:1#include<bits/stdc++.h>2usingnamespacestd;3intn,m;4intgraph[1005][1005]={0};5boolvisited[1005]={false};6voiddfs(intp){7if(visited[p]){8return;9}10visited[p]
  • 2024-10-31算法-并查集
    1.寻找图中是否存在路径(LeetCode1971)有一个具有n个顶点的双向图,其中每个顶点标记从0到n-1(包含0和n-1)。图中的边用一个二维整数数组edges表示,其中edges[i]=[ui,vi]表示顶点ui和顶点vi之间的双向边。每个顶点对由最多一条边连接,并且没有顶点存在与
  • 2024-10-31LUOGU_进阶数据结构
    LUOGU_进阶数据结构二叉堆P10977CuttheSequence:因为DP的值是单调递增的,所以可能的决策点只有最远的合法位置与那些后缀最大值段的左端点,用单调队列+可删除堆(懒标记)做。如果\(\exista<0\),怎么做?CDQ优化DP,可以做!!并查集P10350ModernizacjaBajtocji:把二选一的居民放进一
  • 2024-10-30【并查集】【中间值范围】NOIP2017]奶酪
    https://ac.nowcoder.com/acm/contest/22904/1027开了ll还见祖宗注意x^2+y2算完之后先判断有没有超4r2的范围,没有的话再计算z^2,算是对longlong溢出的特判#include<bits/stdc++.h>typedeflonglongll;usingnamespacestd;classUnionFind{public:UnionFind(ll
  • 2024-10-28【寻迹#4】并查集
    并查集一、并查集并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节点表示对应集合中的元素。顾名思义,并查集支持两种操作:合并(Union):合并两个元素所属集合(合并对应的树)查询(Find):查询某个元素所属集合(查询对应的树的根节点),这可以用于判
  • 2024-10-27并查集
    并查集并查集是一种数据结构,它主要处理一些不相交集合的合并问题。一些常见的用途有求连通子图、最小生成树Kruskal算法和求公共祖先等。并查集的主要操作有:初始化Init查询Find合并Union初始化Init()voidInit(intn){vector<int>father(n+1);//创
  • 2024-10-27经典算法思想--并查集
    前言 (最近在学习Java,所有函数都是用Java语言来书写的)前言部分是一些前提储备知识在并查集(Union-Find)数据结构中,rank(中文称为“秩”)是用来表示树的高度或深度的一种辅助信息。它的主要作用是优化合并操作,以保持并查集的结构尽可能扁平,从而提高查询效率。秩的具体定义
  • 2024-10-26CF771A. Bear and Friendship Condition 题解 并查集
    题目链接:https://codeforces.com/problemset/problem/771/A视频讲解:https://www.bilibili.com/video/BV1tZ1FYPELp/?p=6题目大意:判断一个无向图中的每个连通块是否都是一个完全图。首先我们可以用并查集维护每个连通块的大小。其次,我们可以开一个\(cnt_i\)表示以节点\(i\)