首页 > 其他分享 >Kruskal重构树学习笔记

Kruskal重构树学习笔记

时间:2023-12-22 19:45:44浏览次数:33  
标签:重构 int Kruskal 笔记 点权 集合 节点

挺简单的知识点(?)

概念

首先 Kruskal 算法是用来求最小生成树的算法之一,其思想是贪心。

而 Kruskal 重构树就是将整张图重建为二叉树。

在跑 Kruskal 的过程中我们会从小到大加入若干条边。现在我们仍然按照这个顺序。

首先新建 \(n\) 个集合,每个集合恰有一个节点,点权为 \(0\) 。

每一次加边会合并两个集合,我们可以新建一个点,点权为加入边的边权,同时将两个集合的根节点分别设为新建点的左儿子和右儿子。然后我们将两个集合和新建点合并成一个集合。将新建点设为根。

不难发现,在进行 \(n-1\) 轮之后我们得到了一棵恰有 \(n\) 个叶子的二叉树,同时每个非叶子节点恰好有两个儿子。这棵树就叫 Kruskal 重构树。

比如这张图

它会被重构成

性质

Kruskal 重构树有很多性质

  1. Kruskal 重构树是一棵二叉树

  2. 原图中所有节点与 Kruskal 重构树上的叶子节点一一对应

  3. 每个节点的点权是其子树所有节点(包括本身)中的最大点权(不考虑叶子结点)

  4. 两点之间所有简单路径上最大边权的最小值 \(=\) 最小生成树上两个点之间的简单路径上的最大值 \(=\) Kruskal 重构树上两点之间的LCA的权值。

Code

动态数组版
const int N=1e5;
int n,m;
int k,t,s,d;
struct node
{
    int u,v,w;
    bool operator<(const node& e) const {return w<e.w;}
}ee[N];
vector<int> e[N];
int d[N],f[N],a[N],down[N],fa[N][18];
int cnt;
int find(int x) 
{
    return f[x]==x ? f[x] : f[x]=find(f[x]);
}
int Kruskal()
{
    sort(ee+1,ee+1+m);
    for(int i=1;i<=2*n;++i)
        f[i]=i;
    cnt=n;
    for(int i=1;i<=m;++i)
    {
        int u=find(ee[i].u),v=find(ee[i].v);
        if(u!=v)
        {
            d[++cnt]=ee[i].w;
            f[u]=f[v]=f[cnt]=cnt;
            e[cnt].fush_back(u);
            e[cnt].fush_back(v);
        }
    }
    return cnt;
}

例题

在写

参考资料

oi-wiki

CSDN

标签:重构,int,Kruskal,笔记,点权,集合,节点
From: https://www.cnblogs.com/HSxh/p/17922250.html

相关文章

  • 机器学习笔记(二)使用paddlepaddle,再探波士顿房价预测
    目标用paddlepaddle来重写之前那个手写的梯度下降方案,简化内容流程实际上就做了几个事:数据准备:将一个批次的数据先转换成nparray格式,再转换成Tensor格式前向计算:将一个批次的样本数据灌入网络中,计算出结果计算损失函数:以前向计算的结果和真是房价作为输入,通过算是函数sqare......
  • Burnside 引理 与 Pólya 定理 学习笔记
    为了防止明天就把好不容易听完的东西都还给rabbit_lb了,还是记一点吧。1.群论基础1.1群(group)的定义给定集合\(G\)和\(G\)上的二元运算\(\cdot\),满足下列条件称之为群:封闭性:若\(a,b\inG\),则\(a\cdotb\inG\)。结合律:对于任意\(a,b,c\inG\),有\((a\cdotb)\cd......
  • 机器学习笔记(一)从波士顿房价预测开始,梯度下降
    从波士顿房价开始目标其实这一章节比较简单,主要是概念,首先在波士顿房价这个问题中,我们假设了一组线性关系,也就是如图所示我们假定结果房价和这些参数之间有线性关系,即:然后我们假定这个函数的损失函数为均方差,即:那么就是说,我们现在是已知y和x,来求使得这个损失函数Loss最小......
  • Swift 笔记-1 基本类型,集合类型,控制流与基本函数
    目录基本类型变量与常量字符串单行多行整型浮点布尔值集合类型数组字典Dictionaries集合Sets枚举Enums控制流条件判断循环代码块抽象结构函数声明函数返回类型声明返回多个值自定义参数标签函数参数默认值函数与错误最近对iOS开发有兴趣,学习SwiftUI,主要跟的是hackingwiths......
  • 【终极教程】Cocos2dx服务端重构(优化cocos2dx服务端)
    【终极教程】Cocos2dx服务端重构(优化cocos2dx服务端)文章目录概述问题概述1.代码混淆代码加密具体步骤测试和配置阶段IPA重签名操作步骤2.缺乏文档3.缺乏推荐的最佳实践4.性能问题总结 概述Cocos2dx是一个非常流行的跨平台游戏引擎,开发者可以使用这个引擎来开......
  • 《软件需求十步走》阅读笔记四
    读到第四篇,就是需求工程的规划篇。   需求规划工作是面向“全业务、全信息、全系统”,业务是事项,采用分析综合、归纳演绎的逻辑方法整理出组织与对象的业务逻辑模型,在此业务的逻辑模型基础上进行系统的规划。也是事项的实作行为,也是对所做事项的总称。 业务研究就是借鉴科......
  • 【GUI软件】小红书详情数据批量采集,含笔记内容、转评赞藏等,支持多笔记同时采集!
    一、背景介绍1.1爬取目标您好!我是@马哥python说,一名10年程序猿。我用python开发了一个爬虫采集软件,可自动按笔记链接抓取笔记的详情数据。为什么有了源码还开发界面软件呢?方便不懂编程代码的小白用户使用,无需安装python,无需改代码,双击打开即用!软件界面截图:爬取结果截图:结......
  • 【GUI软件】小红书详情数据批量采集,含笔记内容、转评赞藏等,支持多笔记同时采集!
    目录一、背景介绍1.1爬取目标1.2演示视频1.3软件说明二、代码讲解2.1爬虫采集模块2.2软件界面模块2.3日志模块三、获取源码及软件一、背景介绍1.1爬取目标您好!我是@马哥python说,一名10年程序猿。我用python开发了一个爬虫采集软件,可自动按笔记链接抓取笔记的详情数据。......
  • 【学习笔记】使用科学和魔法。
    一直没有太理解我们是怎么上网的,今天逼着自己问了问GPT,这是他的回答。因为众所周知的原因,下文中“虚拟virtual私人private网络network”均用【数据删除】代替。连接WiFi:当用户在设备上连接WiFi时,他们实际上是连接到一个本地网络,这个网络由无线路由器提供。这个路由器......
  • ml.net例子笔记6-ml.net v2之AutoML
    AutoML1概念自动化机器学习也称为自动化ML或AutoML,是将机器学习模型开发过程中耗时的反复性任务自动化的过程。数据科学家、分析师和开发人员可以使用它来生成高度可缩放、高效且高产能的ML模型,同时保证模型的质量。https://learn.microsoft.com/zh-cn/dotnet/machine-l......