图论---朴素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;
}
相关推荐
雲墨款哥18 分钟前
JS算法练习-Day10-判断单调数列
前端·javascript·算法
FPGA22 分钟前
CRC校验原理及其FPGA实现
算法
Jina AI29 分钟前
回归C++: 在GGUF上构建高效的向量模型
人工智能·算法·机器学习·数据挖掘·回归
Coovally AI模型快速验证34 分钟前
YOLO、DarkNet和深度学习如何让自动驾驶看得清?
深度学习·算法·yolo·cnn·自动驾驶·transformer·无人机
luoqice40 分钟前
linux下找到指定目录下最新日期log文件
linux·算法
努力努力再努力wz1 小时前
【c++深入系列】:万字详解模版(下)
java·c++·redis
楽码1 小时前
底层技术SwissTable的实现对比
数据结构·后端·算法
fffcccc11121 小时前
初级背包问题,层层剖析为什么这样做。最好需要自己推演一遍。
算法
KyollBM1 小时前
【图论】分层图 / 拆点
图论
瓦特what?2 小时前
关于C++的#include的超超超详细讲解
java·开发语言·数据结构·c++·算法·信息可视化·数据挖掘