图论---朴素Prim(稠密图)

O( n ^2 )

  • 题目通常会提示数据范围

    • V ≤ 500,两种方法均可(朴素Prim更稳)。

    • V ≤ 1e5,必须用优先队列Prim + vector 存图。

cpp 复制代码
// 最小生成树 ---朴素Prim
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
 
const int N=510,INF=0x3f3f3f3f;
int n,m;
int g[N][N];
int dist[N]; //表示这个点到集合的距离
bool st[N];
 
int prim()
{
	memset(dist,0x3f,sizeof dist);
	int res=0;
	for(int i=0;i<n;i++)
	{
		int t=-1;
		//找到集合外距离集合最近的点
		for(int j=1;j<=n;j++)
            //找到不在集合当中,且距离集合最近的一个点
			if(!st[j] && (t==-1||dist[t]>dist[j]))
				t=j;
        //举例集合最近的点的距离是INF,说明图不连通
		if(i && dist[t]==INF) return INF;
		//只要不是第一个点,就把新加进来的这条边加到答案里
		if(i) res+=dist[t];
		//用 t 来更新其它的点
		for(int j=1;j<=n;j++) dist[j]=min(dist[j],g[t][j]);
		st[t]=true;
	}
	return res;
}
 
int main()
{
	cin>>n>>m;
	memset(g,0x3f,sizeof g);
	while(m--)
	{
		int a,b,c;
		cin>>a>>b>>c;
		g[a][b]=g[b][a]=min(g[a][b],c);
	}
	int t=prim();
	if(t==INF) puts("impossible");
	else cout<<t<<endl;
	return 0;
}
相关推荐
地平线开发者9 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮9 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者10 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考10 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx13 小时前
CART决策树基本原理
算法·机器学习
Wect14 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱14 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
肆忆_17 小时前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星21 小时前
虚函数表:C++ 多态背后的那个男人
c++
Gorway21 小时前
解析残差网络 (ResNet)
算法