当前位置: 首页 > news >正文

Prim

最小生成树

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;typedef pair<int, int> PII;
/*Prim算法
使用优先队列存储上一个点到这个边的权,以及这个点
首先全部初始化dist为INF,到自己是0
输入的时候,取dist小的,并且是无向两边都要
然后第一个dist为0,插入{0,1}
从队列取出并且弹出
判断是否被访问过,如果是则跳过
如果不是,更新dist,更新total,更新count
然后遍历这个点的全部边,找到比dist里存储的小的,插入队列,以此循环
最后count比n小说明不对
*/
int main()
{int n,m,a,b,c;cin >> n >> m;int E[501][501];int INF=0x3f3f3f3f;for (int i = 1; i <= n; i ++ ){for (int j = 1; j <= n; j ++ ){E[i][j] = i==j?0:INF;}}while (m -- ){cin >> a >> b >> c;E[a][b] = min(E[a][b],c);E[b][a] = E[a][b];}vector<int> dist(n+1,INF);vector<bool> visited(n+1,false);dist[1] = 0;int total=0;int count=0;priority_queue<PII,vector<PII>,greater<PII>> pq;pq.push({0,1});while(!pq.empty()){auto x = pq.top();pq.pop();int u = x.second;int v = x.first;if(visited[u])continue;visited[u] = true;dist[u] = v;total+=dist[u];count++;for (int i = 1; i <= n; i ++ ){if(!visited[i]&&E[u][i]!=INF){if(E[u][i]<dist[i]){pq.push({E[u][i],i});}}}}if(count<n)cout << "impossible";else cout << total;return 0;
}
http://www.sczhlp.com/news/16223/

相关文章:

  • 2025年8月18日
  • CF894A QAQ
  • 长春商城网站开发windows优化大师功能
  • 网站设计教程指数基金是什么意思
  • wordpress设置伪静态北京百度seo排名公司
  • 光伏电站建设的行业网站今日热点新闻排行榜
  • 做网站如何放入图像中国去中心化搜索引擎
  • 创建网页快捷方式青岛seo软件
  • 做网站主要注意些什么问题企业培训课程分类
  • 企业建设网站的好处有哪些seo推广怎么学
  • 做产品推广哪个网站好app拉新推广平台
  • 重庆建网站 私单免费收录网站提交
  • 网站建设 精品课程俄罗斯搜索引擎yandex推广入口
  • 有哪些免费推广网站百度广告位
  • 深圳上市公司网站建设网络广告营销的典型案例
  • 未来做哪个网站能致富手机制作网页用什么软件
  • 安卓小项目源码免费网站360指数查询
  • 域名可以做网站名吗广告推广怎么做最有效
  • 网站建设能用手机制作吗贵阳网站优化公司
  • 做网站商城湛江seo推广外包
  • 网站被劫持应该怎么做霸屏seo服务
  • 临沂建设企业网站英文网站推广
  • 做网站seo的公司广州最新疫情情况
  • 有没有专门做飞卢小说盗版的网站如何在百度提交网站
  • 设计上海网站建设seo优化排名方法
  • 建设网站运营收入企业管理培训视频免费
  • 做网站公司上班违法吗百度免费注册
  • [题解]P10297 [CCC 2024 S3] Swipe
  • 4. StringBuilder类和StringBuffer类
  • Oracle DBA必备脚本:一键获取SQL性能数据,快速定位性能拐点