最小 k 度限制生成树

度限制最小生成树和第K最短路算法 最小生成树算法和第K最短路算法都是图论中的经典算法,它们在网络设计、路由选择等多个领域有着重要应用。这些算法在实际应用中通常需要根据具体问题的特点来选择合适的算法。MST算法着重于构造最小权重的树,而第K最短路算法侧重于寻找多条不同的路径。 阅读详情

所谓最小 k 度限制生成树,就是指有特殊的某一点的度不能超过k时的最小生成树。

简单思想:设特殊的那点为v0,先把v0,删除,求出剩下连通图的所有最小生成树,假如有m棵最小生成树,那么这些生成树必定要跟v0点相连,也就是说这棵生成树的v0点至少是m度的。若m>k,条件不成立,无法找到最小 k 度限制生成树;若m<=k,则枚举m到k的所有最小生成树,即一步步将v0点的度加1,直到v0点的度为k为止,则v0点度从m到k的(k - m + 1)棵最小生成树中最小的那棵即为答案。


具体步骤:

1. 先求出最小 m 度限制生成树:原图中去掉和 V0 相连的所有边(可以事先存两个图, Ray 的方法是一个邻接矩阵,一个邻接表,用方便枚举边的邻接表来构造新图),得到 m 个连通分量,则这 m  个连通分量必须通过 v0 来连接,所以,在图 G  的所有生成树中 dT(v0)≥m 。也就是说,当 k<m 时,问题无解。对每个连通分量求一次最小生成树(哪个算法都行),对于每个连通分量 V’ ,用一条与 V0 直接连接的最小的边把它与 V0 点连接起来,使其整体成为一个生成树。于是,我们就得到了一个 m 度限制生成树,不难证明,这就是最小 m 度限制生成树。

2. 由最小 m 度限制生成树得到最小 m+1 度限制生成树;:连接和 V0 相邻的点 v ,则可以知道一定会有一个环出现(因为原来是一个生成树),只要找到这个环上的最大权边(不能与 v0 点直接相连)并删除,就可以得到一个 m+1 度限制生成树,枚举所有和 V0 相邻点 v ,找到替换后,增加权值最小的一次替换 (当然,找不到这样的边时,就说明已经求出) ,就可以求得 m+1 度限制生成树。。如果每添加一条边,都需要对环上的边一一枚举,时间复杂度将比较高(但这个题数据比较小,所以这样也没问题,事实上,直接枚举都能过这个 题),这里,用动态规划解决。设   Best(v) 为路径 v0—v 上与 v0 无关联且权值最大的边。定义 father(v) 为 v 的父结点,由此可以得到动态转移方程: Best(v)=max(Best(father(v)),ω(father(v),v)) ,边界条件为 Best[v0]=-∞ (因为我们每次寻找的是最大边,所以 -∞ 不会被考虑) ,Best[v’]=-∞| (v0,v’)∈E(T) 。

3. 当 dT(v0)=k 时停止(即当 V0 的度为 k 的时候停止),但不一定 k 的时候最优。

接下来说一下算法的实现:

采用并查集+ kruskal 代码量还少一点。

首先, 每个连通分量的的最小生成树可以直接用一个循环,循环着 Kruskal 求出。这里利用了联通分量间的独立性,对每个连通分量分别求最小生成树,和放在一起求,毫不影响。而且kruskral算法保证了各连通分量边的有序性。

找最小边的时候,上面讲的动态规划无疑是一种好方法,但是也可以这么做:

先走一个循环,但我们需要逆过来加边,将与v0关联的所有边从小到达排序,然后将各连通分量连接起来,利用并查集可以保证每个连通分量只有一条边与v0相连,由于边已经从小到达排序,故与每个连通分量相连的边就是每个连通分量与v0相连中的最小边。

然后求 m+1 度的最小生成树时,可以直接用 DFS ,最小生成树要一直求到 k 度,然后从中找出一个最优值。

Linux内核编程(十三)Input输入子系统 Input 子系统是 Linux 内核中专门为输入设备设计的一个子系统,它提供了一个通用的框架来管理各种输入设备,如键盘、鼠标、触摸屏、游戏手柄等。这个子系统的主要目的是简化和规范化输入设备驱动的开发,同时提高驱动的通用性和兼容性。(1)输入设备:如键盘、鼠标、触摸屏、游戏手柄等,它们是用户与计算机进行交互的主要方式。(2)输入设备驱动的复杂性:传统上,为每种输入设备编写驱动都需要创建文件、进行硬件初始化、实现文件操作函数集和处理中断等。每种设备的驱动可能都有许多重复性的工作。 阅读详情

相关推荐

ESP32蓝牙配网实战:微信小程序中的blufi协议实现与优化

本文详细介绍了在微信小程序中实现ESP32蓝牙配网的实战经验,重点解析了blufi协议的应用与优化。内容涵盖从开发环境配置、协议帧格式解析,到小程序端蓝牙通信、数据转换的核心步骤,并提供了配网状态机设计、错误处理及性能调优等进阶方案,旨在帮助开发者高效、稳定地完成物联网设备配网功能开发。

weixin_29159613的博客 459

K小生成树(kmst)------并查集

#include <bits/stdc++.h> using namespace std; const int MAX_N = 110; int n, m, q; int sols[int(1e7 + 200)], tot, fa[MAX_N]; bool vis[MAX_N]; struct edge { int from, to, weight; } edg...

weixin_44781226的博客 2257

手把手教你用STM32硬件SPI驱动BMI088陀螺仪(附完整代码)

本文提供了一份详尽的STM32硬件SPI驱动BMI088陀螺仪的实战指南。内容涵盖从硬件连接、SPI底层配置、驱动层封装到设备初始化、数据读取与同步策略,并深入探讨了数据处理、滤波融合及温度补偿等核心技巧,旨在帮助开发者构建稳定高效的IMU驱动框架,解决BMI088应用中常见的挑战。

quiet的专栏 529

最小生成树(K和P算法)

图的最小生成树

qq_45599754的博客 786

如何让 RTX 5090 开启 PCIE P2P 以加速多卡通信

RTX 5090 基于新的 Blackwell 架构。NVIDIA 出于对某些主板兼容性(如 IOMMU、Resizable BAR 策略)的保守考虑,**屏蔽了 5090 的 BAR1 P2P 功能**。 我们需要通过 Patch 驱动源码,强制开启这一隐藏功能。 开启 P2P 后,PyTorch 的集合通信算子(Multi-GPU 训练的核心)延迟显著降低,**All-Reduce 甚至降低了 60% 以上**。

Hi20240217的博客 1737

win10离线安装.NetFrameWork3.5出现0x800F081F解决办法。

由于公司开发环境是内网,并且安装arcgis10.2又需要.NetFrameWork3.5的环境,安装.NetFrameWork3.5的又总是报错“0x800F081F”找不到源文件。折腾了两天总算解决了。 首先我们能在网上搜索到的教程,你一定看到过这样的教程,就是使用下面的命令来进行安装。 dism /online /Enable-Feature /Featu...

AIGIS的博客 1万+

图详解第三篇:最小生成树(Kruskal算法+Prim算法)

最小生成树:Kruskal算法+Prim算法

m0_70980326的博客 2万+

4.4 直流无刷电机(BLDC):控制器硬件设计

摘要 本文详细阐述了直流无刷电机(BLDC)控制器的硬件设计要点。控制器硬件主要包括微处理器单元、功率驱动模块、信号检测电路、通信接口和电源管理模块。在微处理器选型方面,分析了ARM Cortex-M系列、DSP等架构的适用场景,并对比了不同处理器的性能参数。功率驱动模块设计重点包括栅极驱动电路、逆变桥热管理和电流保护机制。信号检测部分介绍了位置传感器接口和模拟信号调理技术。此外,还讨论了通信接口设计、电源管理方案以及硬件布局与EMC设计规范。最后强调了硬件测试验证的重要性,包括故障注入测试等验证方法。整体

技术工作者 185

K度限制最小生成树

K度限制最小生成树 含义: 在最小生成树的基础上,限制了某一点v0的度最大为K (<=K) ,要求满足此条件的最小生成树。 求解方法: 先在删去点v0的基础上跑最小生成树。此时有可能生成M个最小生成树(连通块),那么v0的度就至少为M,因为v0必须与每个连通块相连才能最终生成一棵树。然后每棵树选择一个和v0相连权值最小的边,连接此边,生成M度最小生成树。 求出每个点到v0的最短路径上的权值最大的边dp[i]。 遍历与v0相连但不在树中的边edge[v0][v],假设连接其中一条边,则应删去该边对应的

Khasehemwy的博客 840

PDBfixer: PDB修补蛋白残基

PDBFixer是一款专门用于修复蛋白质数据库(PDB)文件常见问题的工具。它能自动处理X射线晶体学结构中常见的缺陷,包括缺失氢原子、不完整侧链、非标准残基等问题。该工具提供三种使用方式:图形界面、命令行和Python API,支持添加缺失原子(全部/重原子/氢原子)、替换非标准残基、补全缺失残基等功能。特别适用于分子动力学模拟前的预处理,可自动添加水盒子并调整离子浓度。用户可通过简单命令或自定义脚本实现复杂修复流程,内置非标准残基替换表确保结构标准化。

Protein Designer的博客 933

深入探讨:StoreKit 2的交易处理与收据验证

iOS应用开发中,StoreKit 2带来收据处理和交易验证的新变化。本文通过实例分析,对比传统StoreKit与StoreKit 2的差异,指出直接访问sandboxReceipt文件可能引发错误。解决方案是使用Transaction对象和SKReceiptRefreshRequest,详细介绍了如何初始化ReceiptLoader、处理交易更新及验证收据的完整流程,帮助开发者适应新框架,确保购买流程安全可靠。

m0_74337424的博客 357

#4865. MST

题目描述 给一个 nnn 个点, mmm 条边的带边权无向图和一个整数 kkk 。请你求出这张图第 kkk 小的生成树的权值和。两棵生成树被认为是不同的当且仅当存在一条边 eee 使得其在一棵树中,而不在另一棵树中。 数据范围 满足 1≤n≤50,1≤m≤2000,1≤k≤100001 \le n \le 50,1 \le m \le 2000, 1 \le k \le 100001≤n≤50,1≤m≤2000,1≤k≤10000 。 题解 考虑先把边排序并赋予排序后的编号,求出最小生成树后去拓展其他生成

Johnny817的博客 284

玩转Docker | 使用Docker部署MediaCMS内容管理系统

玩转Docker | 使用Docker部署MediaCMS内容管理系统

qq_59334230的博客 2920

最小k度限制生成树

/************************************************* 算法引入: 最小k度限制生成树,就是指有特殊的某一点的度不能超过k时的最小生成树; 如果T是G的一个生成树且dT(v0)=k,则称T为G的k度限制生成树; G中权值和最小的k度限制生成树称为G的最小k度生成树; 算法思想: 设特殊的那点为v0,先把v0删除,求出剩下连通图的所有最小生成树; 假如

始往流离,终彼成章。 4324

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

最小K度限制生成树

算法目的:给出V0,KV_{0},K和一个带边权的无向图,求出在V0V_{0}的度数最多为KK的限制下的最小生成树预备知识:最小生成树、动态规划定义:强制K度最小生成树为所有生成树中V0V_{0}的度数为KK的权值最小的生成树大概思路:先把V0V_{0}和V0V_{0}有关的边都删除,假设现在的图分成了MM个联通块,则我们可以得知对于任何生成树V0V_{0}的度数至少为MM。那么我们依次求出强制M度

commonc的博客 2228

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

最小度限制生成树(K度限制生成树)

例题 POJ 1639 Picnic Planning 求最小度生成树,实质上是将一个V0点的最小度生成树展开的过程。 首先,求的除了V0点以外的所有子树的最小生成树,并且知道每棵子树到V0的最小边,以及是由哪个点延展过去的,于是,我们首先可以确定最小度生成树,假设此时的度是cnt。(子树个数) 然后就是展开的过程,对于每棵子树,我们找到最优的展开点,而且,要知道对于所有的最优展开的点只...

既然弱小,就只顾变强就是了 1049

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

POJ 1639 Picnic Planning (k度限制最小生成树)

题目类型  次小生成树 题目意思 给出 n 个点 m 条边问最小生成树是否唯一 (n 解题方法 先用kruscal算法求出最小生成树和构成最小生成树的边 然后对于这棵最小生成树用 dfs 求出任两点间路径上最长的一条边是多少 然后枚举刚才后面没用过的边 (u, v) , 新的生成树的最小花费是w(u,v) - maxlen[u][v] (即现在枚

yunyouxi0's blog 1007

k度限制最小生成树

//poj 1639 int g[N][N]; int clo[N],dis[N],pre[N]; int n,rt; int prim(int s,int id){ dis[s]=0; int ans=0; while(1){ int idx=-1,tmp=INF; for(int i=0;i<n;i++)if(!clo[i]&&dis[i

wen_xp的专栏 689

POJ --- 1639 【k度限制最小生成树】

链接题目大意:  给出m条边,每条边有两个端点和一个权值;  求这个图在满足以下条件的情况下的最小生成树;  在所有点中,有一个特殊点Park,它在求得的最小生成树中的度必须小于等于某个值; 思路: k度限制最小生成树,也就是某个顶点有度数限制的生成树。 对这道题来说是名字为Park的顶点有度数限制,最大为k,我们把这个顶点设为v0好了。 首先需要知道生成树有一个回路性质:设C为图G中的

Anxdada -- 我等风来也等你 1124

【UVA1537】Picnic Planning -最小k度限制生成树

【题目链接】https://www.luogu.com.cn/problem/UVA1537 【题目大意】 给定一张N个点M条边的无向图,求出无向图的一棵最小生成树,满足一号节点的度数不超过给定的整数s。保证 N <= 30 【分析】 实际上本题是求一个最小度限制生成树,什么是最小度限制生成树,就是指无向图中某一个特定的结点的度等于一个指定的数值且权值和最小的一棵生成树。 用数学语言来描述:...

迦勒底驻罗德岛本丸 304

【POJ 1639】 Picnic Planning (最小k度限制生成树)

【题意】   有n个巨人要去Park聚会。巨人A和先到巨人B那里去,然后和巨人B一起去Park。B君是个土豪,他家的停车场很大,可以停很多车,但是Park的停车场是比较小。只能停k辆车。现在问你在这个限制条件下。巨人到达Park的最短距离。   如果把那个条件去掉。那么就是就是求最小生成树。加上那个条件其实就是求顶点度数限制为k的最小生成树。 Input Input will...

weixin_30673611的博客 183

Picnic Planning poj 1639 k度限制生成树

传送门:poj1639 题意就很晦涩,看了半天才看懂。。我就不解释了,没看懂的再去看看吧。。 重点的重点是本题用到的算法:K度限制最小生成树 即求一个图的最小生成树,且给定点v的度数必须为k。 这也是我第一次接触这个名词,百度了一些资料罗列在下面: 国家集训队2004论文集_汪汀:http://wenku.baidu.com/view/8abefb175f0e7cd1842536aa.h

WA是一笔财富 416

poj1639 Picnic Planning,K度限制生成树

题意: 矮人虽小却喜欢乘坐巨大的轿车,车大到可以装下无论多少矮人。某天,N(N≤20)个矮人打算到野外聚餐。为了集中到聚餐地点,矮人A 要么开车到矮人B 家中,留下自己的轿车在矮人B 家,然后乘坐B 的轿车同行;要么直接开车到聚餐地点,并将车停放在聚餐地。虽然矮人的家很大,可以停放无数量轿车,但是聚餐地点却最多只能停放K 辆轿车。给你一张加权无向图,描述了N 个矮人的家和聚餐地点,求出所有矮人开

天亮说晚安 2188
上一篇: 面试题——转自http://blog.himdd.com/?p=2977
下一篇: 向死而生
ColorWaterer
博客等级 码龄12年 16粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值