首页 > Forsaken喜欢独一无二的树
头像 sunrise__sunrise
发表于 2020-07-13 22:16:35
题目描述 给出n个点,m条边的情况,问如果要生成的最小生成树唯一需要删除的边权和是多少? 解题思路 最小生成树kruskal求法这里不多赘述,就是对边权排序之后,用并查集去连接集合,知道剩下一个集合结束。那么我们知道,如果要生成最小生成树唯一?为什么不唯一?就是因为存在连接两个集合中存在多种边权 展开全文
头像 苟且的狮子
发表于 2020-07-27 20:25:11
题意: 分析: 正如“jxnu-19-软技一班-刘晟”所说的,按照kruskai算法的想法来看的话,出现多条最短路径的原因只可能是存在复数的最小权值边连接着两个集合以供选择。那我们其实只要在kruskai算法进行的同时动手脚就行了。我们先对权值进行从小到大的排序,然后将其分为一个个的相等权值的集 展开全文
头像 哇我不起名了
发表于 2022-05-05 10:05:21
貌似看起来没几个用kruskal重构树来写该题的 那就直接来一发kruskal重构树的题解 建议学习完kruskal重构树知识点后再来阅读本题解更佳 核心思想在于建完图后,枚举未被选入构成最小生成树的边,利用该边两端点间最小瓶颈路径判断是否需要删除该边 时间复杂度大概是O(Mlog2N)级别的(不太 展开全文
头像 sunny_forever
发表于 2021-07-08 21:54:51
题意 删除一些边,使得最小生成树唯一,问删除的边的权值和最小是多少? 思路 为什么最小生成树不唯一:因为连接相同两个集合的边,权值相同的可能有多个所以,我们只需要删除 权重相同的 且 连接同两个集合的 那些边即可 :这些边中留一个 用于维持最小生成树,其余的均删掉。 因为是 稀疏图,所以使用 Kru 展开全文
头像 在刷题的单身狗很开心
发表于 2023-11-12 12:05:46
由克鲁斯卡尔算法可以知道,将边排序后一股脑的加入到最小生成树里面,只要没有回路就是最小的生成树。 那么排序过后可能会有一些边是长度相同的,这些边有可能不适用于当前的生成树,但正因为这些长度相同边的存在才导致最小生成树不唯一。 那么将这些无法加进最小生成树,但长度相同的边删除就是结果。 展开全文
头像 cheeserish
发表于 2020-07-17 16:18:39
#include<bits/stdc++.h> using namespace std; #define int long long const int maxn=300000; int head[maxn],cnt,n,m,sm,f[maxn],cost=0; struct e{ 展开全文
头像 肖先生~
发表于 2020-07-17 20:13:05
最小生成树升级版 刚开始我就傻眼了!!! 题目给的数据实在是不好调试,最后还是看的大佬的代码才理解的 题目分析:1.首先代码几乎和最小生成树差不多,但是题目的意思要明白,如果形成唯一的最小生成树至少要去掉多少边的权值和,我们要明白为什么一个图里面有多条最小生成树,唯一的原因就是相同权值的边有多条,因 展开全文
头像 AvariceZhao
发表于 2022-07-09 23:14:31
题意 删除一些边,使得最小生成树唯一,问删除的边的权值和最小是多少? 思路 kruskal按边权从小到大排序后可以视为将所有边按边权分段,在同一段内先将可能的边全部计入,随后遍历这一段长度相同的边,对于左右端点不在同一集合里的边将边权从累加的边权和删去,即保留一条最小生成树中的边。剩余的即为应删去的 展开全文
头像 在刷题的杭州结巴粉丝
发表于 2025-01-25 22:17:45
#include<bits/stdc++.h> using namespace std; #define int long long const int N=2e5+10; struct edge{ &nbs 展开全文
头像 Anchedong
发表于 2023-07-15 11:46:12
最小生成树kruskal求法这里不多赘述,就是对边权排序之后,用并查集去连接集合,知道剩下一个集合结束。 那么我们知道,如果要生成最小生成树唯一?为什么不唯一?就是因为存在连接两个集合中存在多种边权相同的方法。 那么我们直接把这些边权相同的但是连接相同的两个集合的一些边,留下一条,其余删掉就是最终答 展开全文