#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
“次小生成树类问题”模版
最新推荐文章于 2021-07-06 16:27:20 发布
本文提供了一个用于求解次小生成树问题的模版,重点在于计算每对节点间最大瓶颈路径的边长maxcost[u][v]数组。模版基于LRJ例题代码,以结构体形式呈现。最小瓶颈路是指在加权无向图中找到从u到v的路径,使得路径上最长边的长度最短。次小生成树可以通过最小生成树加上一条边然后删除一条边得到,删除边的长度可通过maxcost数组直接获取。该算法的时间复杂度为O(n^2)。
摘要由CSDN通过智能技术生成