#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[u][x] = maxcost[x][u] = max(maxcost[x][fa], facost);
}
nodes.push_back(u);
“次小生成树类问题”模版
最小瓶颈路求解模板
最新推荐文章于 2024-01-10 09:28:46 发布
本文提供了一个用于求解次小生成树问题的模版,重点在于计算每对节点间最大瓶颈路径的边长maxcost[u][v]数组。模版基于LRJ例题代码,以结构体形式呈现。最小瓶颈路是指在加权无向图中找到从u到v的路径,使得路径上最长边的长度最短。次小生成树可以通过最小生成树加上一条边然后删除一条边得到,删除边的长度可通过maxcost数组直接获取。该算法的时间复杂度为O(n^2)。

最低0.47元/天 解锁文章
5466

被折叠的 条评论
为什么被折叠?



