洛谷4180 【模板】严格次小生成树(最小生成树+树链剖分)

该博客主要介绍了如何求解严格次小生成树问题,强调了它与最小生成树的区别仅在于一条边,并提供了利用最小生成树和树链剖分的解题思路。博主通过枚举边并处理环来找到次小生成树,同时讨论了如何处理边权相等的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传送门

【题目分析】

首先明确一点:严格次小生成树与最小生成树有且只有一条边不同。

证明比较显然,自己画画图就行了,因为能替换的一定会构成一个环,依据这个就可以推出来。

同样,根据上面这个结论,我们可以枚举所有边,如果这条边不在生成树上,那么如果将这条边加入生成树中一定就会构成一个环,这时候只用将环上最大边删去即可,但考虑到严格次小生成树并且最大边可能与当前边权值相同,所以还要记录次大值。

所以相当于我们要询问最小生成树上两点之间路径的最大值或次大值,直接树剖即可。

【代码~】

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAXN=1e5+10;
const int MAXM=3e5+10;
const int INF=0x3f3f3f3f;

int n,m,cnt=1;
LL val;
int fat[MAXN],a[MAXN];
int head[MAXN],depth[MAXN],fa[MAXN],son[MAXN],siz[MAXN],top[MAXN];
int nxt[MAXM],to[MAXM];
int w[MAXM];
int dfn[MAXN],ys[MAXN],tot;
struct Edge{
	int u,v,w;
	int used;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值