最小树形图

最小树形图入门总结 求解最小树形图最小权值一般使用算法为朱刘算法. 原理入门推荐博客:https://blog.youkuaiyun.com/qq_34731703/article/details/53965684 ps:该博客使用模板为邻接矩阵实现,便于理解,但是在做题时邻接矩阵初始化耗时太多,我们需要改成前向星的存储方式. 关于模板: 用前向星实现的朱刘算法网上有许多模板,这里放个我觉得比较优秀的模板:https://... 阅读详情
/*本题为不是固定根的最小树形图,我们可以虚拟出一根来,然后在把这个根跟每个点相连,相连的点可以设为无穷大,或者设为所有边和大一点,比如为r,然后就可以利用最小树形图进行计算了,计算出的结果减去r,如果比r还大就可以认为通过这个虚拟节点我们连过原图中两个点,即原图是不连通的,我们就可以认为不存在最小树形图。关于输出最小根也挺简单,在找最小入弧时,如果这条弧的起点是虚拟根,那么这条弧的终点就是要求的根。*/#include <cstdio>#include <iostream>#include<queue>#include<set>#include<ctime>#include<algorithm>#include<cmath>#include<vector>#include<map>#include<cstring>using namespace std;const double eps=1e-10;#define M 1009#define type __int64const type inf=(1LL)<<60;struct point {int x,y,h;}p[M];struct Node{int u , v;type cost;}E[M*M+5];int pre[M],ID[M],vis[M];type In[M],sum; int n,m,ansi;type Directed_MST(int root,int NV,int NE) {type ret = 0;while(true) {//1.找最小入边for(int i=0;i<NV;i++) In[i] = inf;for(int i=0;i<NE;i++){int u = E[i].u;int v = E[i].v;if(E[i].cost < In[v] && u != v) {pre[v] = u;if(u==root)//记录是root从哪一条边到有效点的(这个点就是实际的起点)ansi=i;In[v] = E[i].cost;}}for(int i=0;i<NV;i++) {if(i == root) continue;if(In[i] == inf) return -1;//除了跟以外有点没有入边,则根无法到达它}//2.找环int cntnode = 0;memset(ID,-1,sizeof(ID));memset(vis,-1,sizeof(vis));In[root] = 0;for(int i=0;i<NV;i++) {//标记每个环ret += In[i];int v = i;while(vis[v] != i && ID[v] == -1 && v != root) {vis[v] = i;v = pre[v];}if(v != root && ID[v] == -1) {for(int u = pre[v] ; u != v ; u = pre[u]) {ID[u] = cntnode;}ID[v] = cntnode ++;}}if(cntnode == 0) break;//无环for(int i=0;i<NV;i++) if(ID[i] == -1) {ID[i] = cntnode ++;}//3.缩点,重新标记for(int i=0;i<NE;i++) {int v = E[i].v;E[i].u = ID[E[i].u];E[i].v = ID[E[i].v];if(E[i].u != E[i].v) {E[i].cost -= In[v];}}NV = cntnode;root = ID[root];}return ret;}int main(){int u,v;type w;while(scanf("%d%d",&n,&m)!=EOF){sum=0;for(int i=0;i<m;i++){scanf("%d%d%I64d",&u,&v,&w);u++;v++;E[i].u=u;E[i].v=v;E[i].cost=w;sum+=w;}sum++;for(int i=m;i<m+n;i++)//第i条边的终点为i-m;{E[i].u=0;E[i].v=i-m+1;E[i].cost=sum;}type ans=Directed_MST(0,n+1,m+n);if(ans==-1||ans-sum>=sum)//最小树形图的边权和值大于sum的两倍,说明不可能构成最小树形图,因为必定存在两条从虚拟点出发的边puts("impossible");else { printf("%I64d %d\n",ans-sum,ansi-m);//利用i>=m时,第i条边的终点为i-m;这里不能替换为E[ansi].v-1;因为E[i]在朱刘算法过程中节点信息会变化。}puts("");}return 0;}

poj 3164 && tju 2248 最小树形图 朱刘算法 个人觉得这个博客把这个算法说的比较详细了,直接搬过来吧,我再阐述一遍的话没有人家说的好,还容易说错。 ========================== 分割线之下摘自Sasuke_SCUT的blog====================================== 阅读详情

相关推荐

掌握最小树形图算法及其应用

最小树形图(Minimum Spanning Tree, MST)是一种在图论中用于连接图内所有顶点的树形结构,同时保证所形成的树的边的权重之和最小。这一概念在许多领域,如网络设计、电路板布局以及各种优化问题中都有着广泛的应用。在图论中,权重是连接两个顶点(节点)的边上的一个数值,代表了这两个顶点之间路径的代价或距离。对于无向图,权重是一个实数或整数,它通常被表示为边的一个属性。例如,如果一个图表示的是一个道路网络,那么边的权重可以是道路的长度、通过道路所需的时间或其他表示道路重要性的度量。

weixin_42452924的博客 899

[学习笔记]最小树形图

处理这样一类问题: 给一个有向图,定义树形图:一个有向图以x为根的树形图,是一个n-1条边的集合,使得x能到达其他每一个点 树形图的权值定义为边的和 朱刘算法就是求最小树形图 方法: 1.给每个点p找一个边权最小的连向它的边,边权为val,前驱设为pre。找到了一个边集E0 ans记录总权值 2.检查,如果有一个孤立点(除了rt),那么无解,退出 如果没有有向环,那么完毕。当...

weixin_34329187的博客 198

树莓派与stm32通信超详细解答过程

笔者之前发过关于stm32与openmv通信的教程,在学习了几天opencv后,想实现树莓派4B与stm32进行通信。于是上网查询资料,最后实现了两者之间的通信,相信这对大多数电赛人都很有帮助,opencv的识别效果是远高于openmv以及K210的。在此我参考了以下资料辅助我学习,大家可以参考。基于树莓派4B与STM32的UART串口通信实验(代码开源)_树莓派4b串口波特率-优快云博客。

Halcyon0804的博客 5465

最小树形图-朱刘算法详解 +例题解析

文章目录最小树形图定义和最小生成树的区别朱刘算法思想步骤流程展示算法实现例题 最小树形图 定义 对于有向图G=(V,E)G = (V,E)G=(V,E),其中具有如下性质 GGG中不包含有向环。 存在一个根结点uuu,它不是任何弧的终点,而且uuu的其他顶点都恰好是唯一的一条弧的终点。 那么则称GGG是以uuu为根的树形图。 更笼统的讲,实际上就是有一颗不存在有向环的有向树,且除根结点uuu外的每个顶点都只有一条入边。 而最小树形图则是权值最小的那个。 这是一个最小树形图的例子。 和最小生成树的区别

pursuit的博客 8268

Shader Graph实战:5分钟搞定Flow Map水体流动效果(含UV偏移避坑指南)

本文详细解析了如何使用Unity的Shader Graph工具快速实现Flow Map水体流动效果,涵盖基础原理、核心节点搭建、高级技巧及性能优化。特别针对UV偏移问题提供避坑指南,帮助开发者轻松打造专业级动态水面效果,适合游戏场景增强视觉表现。

weixin_29250403的博客 244

微型纵向加密在新能源场站中的实战部署与运维避坑指南

本文详细解析了微型纵向加密在新能源场站中的实战部署与运维技巧。通过国密算法SM4实现数据加密,确保新能源场站通信安全,同时提供非侵入式部署方案和运维避坑指南,帮助提升网络稳定性和运维效率。

weixin_30505225的博客 596

最小树形图+朱刘算法

大题上完整的朱、刘算法是由四个大步骤组成的: 1、求最短弧集合E 2、判断集合E中有没有有向环,如果有转步骤3,否则转4 3、收缩点,把有向环收缩成一个点,并且对图重新构建,包括边权值的改变和点的处理,之后再转步骤1。 4、展开收缩点,求得最小树形图。 因为我们ACM一般情况下都是在考察队最小树型图的权值问题,所以一般省略步骤4,对于其环的权值和在中间处理过程中就可以处理完毕。所以我...

日拱一卒,功不唐捐 3014

模型检测--工具KeYmaera

论文:KeYmaera: A Hybrid Theorem Prover for Hybrid Systems 作者:Andre Platzer and JanKeYmaera摘要1 介绍2用于混合系统的KeYmaera验证工具3混合系统,混合自动机和混合程序 摘要 KeYmaera是一种用于混合系统的混合验证工具,它结合了演绎,实数代数和计算机代数证明者技术。它是自然的自动和交互式定理证明器 混合系统的规范和验证逻辑。 KeYmaera支持差分动态逻辑,它是用于混合程序的实值一阶动态逻辑,是混合自动机的程

ziigea的博客 1077

【算法精讲】最小树形图 (两份讲解 配套例题)

其一 概述 最小树形图, 简而言之就是求有向带权图的最小生成树. 官方定义是这样的: 最小树形图,就是给有向带权图中指定一个特殊的点root,求一棵以root为根的有向生成树T,并且T中所有边的总权值最小。 通解最小树形图的一种算法是是1965年朱永津和刘振宏提出的复杂度为O(VE)的算法:朱、刘算法。 今天我们就来浅谈一下最小树形图的问题。 最小树形图, 简而言之就是求有向带权图的最小生成树....

Suprit's blog 2246

ruoyi-vue-pro集成magic-api(图文代码)

原先写过简单的集成:了解 magic-api的基本用法 附实战代码 magic-api相关文档推荐阅读:接口鉴权 相关的Java代码推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全) 【Java项目】实战CRUD的功能整理(持续更新)

码农研究僧的博客 7万+

大模型量化方法总结

本文主要对大模型量化方法进行了总结,希望对学习大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 模型精度 3. 量化方法 3.1 方法一 3.2 方法二 3.3 方法三

herosunly的博客 1万+

14 最小树形图&朱刘算法

最小树形图 朱刘算法

weixin_45034895的博客 1164

Python爬虫实战:如何从Google Maps和OpenStreetMap抓取地理坐标数据

地点名称:地理位置的名称或地址。地理坐标:经度和纬度。类别信息:比如餐馆、商店、公园等。评论数据:如果可用,获取用户评论。本文介绍了如何使用Python爬虫从Google Maps和OpenStreetMap抓取地理坐标数据,并展示了如何存储和分析这些数据。通过实际的代码示例,您可以学习到如何处理不同类型的地图数据抓取任务,以及如何应对反爬虫机制。掌握这些技术后,您可以进行更广泛的地理数据分析,提供更有价值的地理信息服务。

2201_76125261的博客 1039

最小树形图(刘朱算法)

<br />学了不少算法,终于第一次学会了以中国人的名字命名的算法,最小树形图的朱-刘算法。前几天看过书、ppt和网上相关的blog,在收缩环关键的那块总看得稀里糊涂。昨晚终于在威士忌的blog上看到了一幅最小树形图的构造流程图,登时大彻大悟。有时一张恰当好处的图表的确胜过万千文字解说。早上起来把它实现了,调试到现在,进一步把各种模糊的细节处理弄清楚了,也终于AC了POJ3164。呵呵<br />网上关于算法的描述有一些,我总结成bin3版。<br />有固定根的最小树形图求法O(VE):<br />首先消

hqd_acm的专栏 5209

自适应控制 (Adaptive Control) 算法详解及案例分析

自适应控制是一种能够在线调整控制器参数以适应系统动态变化的控制方法。其核心思想是通过实时估计系统参数或调整控制器参数,使系统在不确定性或动态变化的环境中仍能保持稳定性和性能。

闲人编程的博客 4084

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

有向图最小生成树——最小树形图(朱…

对于有向图的最小生成树 , 也叫做最小树形图 。 最小树形图的第一个算法是1965年朱永津和刘振宏提出的复杂度为O(VE)的算法。 值得我们骄傲啊 。 下面来分享这个算法 。 1、求最小树形图之前一定要确定根 , 确定根之后再去验证是否存在树形图(这个很简单 , 就是从根节点能不能到其他点) 。 2、如果存在树形图 , 然后再消掉自环 , 因为对于最小树形图 , 是肯定不能存在自环的(还有原因后

zengchenacmer的专栏 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

有向图的最小生成树,最小树形图

转载: 有固定根的最小树形图求法O(VE): 首先消除自环,显然自环不在最小树形图中。然后判定是否存在最小树形图,以根为起点DFS一遍即可。 之后进行以下步骤。 设cost为最小树形图总权值。 0.置cost=0。 1.求最短弧集合Ao (一条弧就是一

CandyLien 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

P4716 【模板】最小树形图

题目背景 这是一道模板题。 题目描述 给定包含 n 个结点, m 条有向边的一个图。试求一棵以结点 r 为根的最小树形图,并输出最小树形图每条边的权值之和,如果没有以 r 为根的最小树形图,输出 −1。 输入格式 第一行包含三个整数 n,m,r,意义同题目所述。 接下来 m 行,每行包含三个整数 u,v,w,表示图中存在一条从 u 指向 v 的权值为 w 的有向边。 输出格式 如果原图中存在以 r...

Mystletainn的博客 283
上一篇: HDU 2121 无固定点的最小树形图
Strive_Buff
博客等级 码龄11年 4粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值