“次小生成树类问题”模版

本文提供了一个用于求解次小生成树问题的模版,重点在于计算每对节点间最大瓶颈路径的边长maxcost[u][v]数组。模版基于LRJ例题代码,以结构体形式呈现。最小瓶颈路是指在加权无向图中找到从u到v的路径,使得路径上最长边的长度最短。次小生成树可以通过最小生成树加上一条边然后删除一条边得到,删除边的长度可通过maxcost数组直接获取。该算法的时间复杂度为O(n^2)。
摘要由CSDN通过智能技术生成
#include<cstdio>
#include<cmath>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;

const int maxn = 1000 + 10;

struct Edge {
  int x, y;
  double d;
  bool operator < (const Edge& rhs) const {
    return d < rhs.d;
  }
};

struct MST{
    int n, m;//点数和边数
    Edge e[maxn*maxn];//储存所有的边
    int pa[maxn];//用于并查集,父指针
    vector<int> G[maxn];//用于Dfs,储存生成树中每个点相邻的点
    vector<double> C[maxn];//用于Dfs,储存相应的边的权
    vector<int> nodes;//用于Dfs,储存已经遍历过的节点
    double maxcost[maxn][maxn];//储存最小生成树中,u、v唯一路径上的最大权值

    //这里是把无根树,转为了有根树,具体做法:
    //在初始调用时Dfs(0,-1,0),然后后面节点拓展儿子时,不允许向回走
    void dfs(int u, int fa, double facost){
        //先对当前点同所有已访问过的节点,进行更新
        for(int i = 0; i < nodes.size(); i++) {
            int x = nodes[i];
            maxcost
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值