严格次小生成树,关键是“严格”,如果是不严格的其实只需要枚举每条不在最小生成树的边,如果得到边权和大于等于最小生成树的结束就行.原理就是因为Kruskal非常贪心,只要随便改一条边就能得到一个非严格的次小生成树.然而是严格的QAQ,于是得搞点别的东西来实现“严格”,维护个次大值就行.依次枚举每条边,如果这条边和加上这条边构成的环中最大的边边权相等,取次大值,否则取最大值. 参考代码: #include<cstdio> #include<algorithm> #define ll l…
[题目链接] 点击打开链接 [算法] 首先,有一个结论 : 一定有一棵严格次小生成树是在最小生成树的基础上去掉一条边,再加上一条边 这个结论的正确性是显然的 我们先用kruskal算法求出最小生成树,然后,枚举不在最小生成树上的边,我们发现若加上这条边, 则形成了一个环,用最小生成树的权值和加上这条边的权值再减去在这个环上且在最小生成树上权值 最大的边即为包括这条边的最小生成树的权值和 那么,树上倍增可以解决这个问题 因为是要求严格最小,所以我们不仅要记录最大值,还要记录次大值 时间复杂度 :…
题目链接:https://www.luogu.org/problemnew/show/P4180 这个题卡树剖.记得开O2. 这个题inf要到1e18. 定理:次小生成树和最小生成树差距只有在一条边上 非严格次小生成树:枚举每一条不在最小生成树上的边,加入到最小生成树中构成一个环.删去这个环上的最大值.(此最大值有可能与加入生成树中的边相等,故为非严格次小生成树.)重复此操作取min,得到次小生成树.(基于kruskal实现.) 严格次小生成树:与非严格次小生成树类似,不同在于为了避免删去环上的…
P4180 [模板]严格次小生成树[BJWC2010] 题意 题目描述 小\(C\)最近学了很多最小生成树的算法,\(Prim\)算法.\(Kurskal\)算法.消圈算法等等.正当小\(C\)洋洋得意之时,小\(P\)又来泼小\(C\)冷水了.小\(P\)说,让小\(C\)求出一个无向图的次小生成树,而且这个次小生成树还得是严格次小的,也就是说:如果最小生成树选择的边集是\(E_M\),严格次小生成树选择的边集是\(E_S\),那么需要满足:(\(value(e)\)表示边\(e\)的权值)\…
洛谷P4180:https://www.luogu.org/problemnew/show/P4180 前言 这可以说是本蒟蒻打过最长的代码了 思路 先求出此图中的最小生成树 权值为tot 我们称这棵树中的n-1条边为“树边” 其他m-n+1条边为“非树边” 枚举每条非树边(x,y,z)添加到最小生成树中 可以在x,y之间构成一个环 设x,y之间的路径最大值为val1 次大值为val2(val1>val2) 则有以下两种情况 当z>val1时 则把val1对应的边换成(x,y,z) 得到一个候…
https://www.luogu.org/problemnew/show/P4180#sub 严格次小生成树,即不等于最小生成树中的边权之和最小的生成树 首先求出最小生成树,然后枚举所有不在最小生成树里的边,找出最小增量, 如果将一条不在最小生成树里的边加入生成树,那么就会形成环 如图,绿色为最小生成树,如果将红色边加入,就在紫色区域构成了环 那么现在增量就是用红色边的边权 - 紫色区域内最大的绿色边的边权这里红色边的边权一定大于等于紫色区域内最大的绿色边的边权(由最小生 成树的构成可知),如…
P4180 [模板]严格次小生成树[BJWC2010] 倍增(LCA)+最小生成树 施工队挖断学校光缆导致断网1天(大雾) 考虑直接枚举不在最小生成树上的边.但是边权可能与最小生成树上的边相等,这样删边时权值不改变,就不满足条件了 所以我们可以先用倍增处理出最小生成树上任意2点之间的最大边权和次大边权 枚举每条不在最小生成树上的边,接到树上,再删去最大边(与枚举边的边权不等)或次大边(最大边与枚举边的边权相等),做个判断 判断边(u,v)时 我们只要询问(u,lca)和(v,lca)就可以了 找…
题目描述: 小C最近学了很多最小生成树的算法,Prim算法.Kurskal算法.消圈算法等等.正当小C洋洋得意之时,小P又来泼小C冷水了.小P说,让小C求出一个无向图的次小生成树,而且这个次小生成树还得是严格次小的,也就是说:如果最小生成树选择的边集是$E_M$,严格次小生成树选择的边集是$E_S$,那么需要满足:($value(e)$表示边e的权值) 这下小 C 蒙了,他找到了你,希望你帮他解决这个问题. 输入输出格式: 输入格式: 第一行包含两个整数N和M,表示无向图的点数与边数.接下来M行…
P4180 [BJWC2010]严格次小生成树 P4180 题意 求出一个无向联通图的严格次小生成树.严格次小生成树的定义为边权和大于最小生成树的边权和但不存在另一棵生成树的边权和在最小生成树和严格次小生成树之间(不相等). 思路 先求出一颗最小生成树,发现严格次小生成树一定是其断了一条边并加了一条边且边权和的增加量最小. 那么我们继续在最小生成树上做.对于每一条不是最小生成树上的边,求出其两端两点间在最小生成树上路径上的边的最大值.然鹅,如果用倍增LCA找,发现如果求出来的最大值与该边权值相等…
洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小生成树弄出来,因为要求次小生成树.至于为什么次小一定只在最小的基础上改变了一条边,我也不会严谨的证明......打表找规律大法好 剩下的可以有一堆数据结构来维护最大值和次大值(原理两位巨佬都讲清楚了,这里只分析一下算法的优劣) kruscal+倍增+LCA 山楠巨佬的做法,我也写了这一种.复杂度\(…