prim+优先队列模板:

 1 #include<stdio.h>    //大概要这些头文件
 2 #include<string.h>
 3 #include<queue>
 4 #include<vector>
 5 #include<algorithm>
 6 using namespace std;
 7 typedef pair<int,int> pii;
 8
 9 int head[30],next[200],point[200],val[200],size,dist[30];    //前向星及dist数组
10 bool vis[30];
11
12 void add (int a,int b, int v){    //加边及去重
13     int i;
14     for(i=head[a];~i;i=next[i]){
15         if(point[i]==b){
16             if(val[i]>v)val[i]=v;
17             return;
18         }
19     }
20     point[size]=b;
21     val[size]=v;
22     next[size]=head[a];
23     head[a]=size++;
24 }
25
26 struct cmp{    //重载小根堆
27     bool operator()(pii a,pii b){
28         return a.first>b.first;
29     }
30 };
31
32 void prim(int s){    //prim函数,传入图中一点
33     int i,ans=0;
34     memset(dist,-1,sizeof(dist));
35     memset(vis,0,sizeof(vis));
36     priority_queue<pii,vector<pii>,cmp>q;
37     for (i=head[s];~i;i=next[i]){
38         dist[point[i]]=val[i];
39         q.push(make_pair(dist[point[i]],point[i]));
40     }
41     dist[s]=0;
42     vis[s]=1;
43     while(!q.empty()){
44         pii u=q.top();
45         q.pop();
46         if(vis[u.second])continue;
47         vis[u.second]=1;
48         ans+=u.first;
49         for(i=head[u.second];~i;i=next[i]){
50             int j=point[i];
51             if(!vis[j]&&(dist[j]>val[i]||dist[j]==-1)){
52                 dist[j]=val[i];
53                 q.push(make_pair(dist[j],j));
54             }
55         }
56     }
57     printf("%d\n",ans);
58 }

转载于:https://www.cnblogs.com/cenariusxz/p/4522320.html

最小生成树--prim+优先队列优化模板相关推荐

  1. poj1861 最小生成树 prim amp; kruskal

    // poj1861 最小生成树 prim & kruskal // // 一个水题,为的仅仅是回味一下模板.日后好有个照顾不是#include <cstdio> #include ...

  2. dijkstra 的优先队列优化

    既然要学习算法,就要学习到它的精髓,才能够使用起来得心应手. 我还是远远不够啊. 早就知道,dijkstra 算法可以用优先队列优化,我却一直不知道该怎样优化.当时,我的思路是这样的:假设有n个顶点, ...

  3. C/C++数据结构——道路建设(最小生成树Prim)

    题目描述 随着如今社会的不断变化,交通问题也变得越来越重要,所以市长决定建设一些公路来方便各个城市之间的贸易和交易.虽然市长的想法很好,但是他也遇到了一般人也经常头疼的问题,那就是手头的经费有限--在 ...

  4. Dijkstra算法堆/优先队列优化

    Dijkstra算法堆/优先队列优化 前言 额外知识简介 堆与优先队列 STL库 重载 Dijkstra分析及优化 分析优化 代码实现 存储结构 边 点 优先队列 函数 初始化 添加边 Dijkstr ...

  5. 最小生成树 - Prim算法

    最小生成树 - Prim算法 思路: 采用 贪心策略,每次选取连通块外延的最短边和对应的点放入连通块,再更新新的连通块外延的边.连通部分逐渐扩大,最后将整个图连通起来,并且边长之和最小. 时间复杂度: ...

  6. 可视化最小生成树Prim、Kruskal

    代码下载链接:(41条消息) 可视化最小生成树Kruskal,DEV配EGE-C文档类资源-CSDN文库 代码下载链接:(41条消息) 可视化最小生成树Prim,DEV配EGE-C文档类资源-CSDN ...

  7. P2048 [NOI2010] 超级钢琴(ST表 + 优先队列优化)

    P2048 [NOI2010] 超级钢琴 题目 小 Z 是一个小有名气的钢琴家,最近 C 博士送给了小 Z 一架超级钢琴,小 Z 希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出 ...

  8. C++ 读入优化与输出优化 模板

    简介 C++ 是一种神奇的编程语言-- 自然,读入和输出也有着许多种形式: 如:scanf(),cin>>,cout<<,printf()scanf(),cin>> ...

  9. 2018南京网络赛L题 Magical Girl Haze(分层图+优先队列优化的dijkstra)

    使用优先队列优化过的dijkstra时间复杂度可以达到O(v*logn),还是很快的. #include <iostream>                //最好是用long long ...

最新文章

  1. 什么是区块链智能合约?
  2. 这里有一份福利“拍了拍”你
  3. SSM整合支付宝支付功能
  4. GNU make manual 翻译(四十三)
  5. 学计算机随随便便上万,大学“最烧钱”专业排行榜,“家境一般”慎入,“土豪”请随意...
  6. 传感器信号处理仿真实验(c语言实现),均值滤波,滑动滤波
  7. 记一起因证书引发的支付宝支付异步通知接收不到的事故
  8. SpringBoot使用Mybatis-PageHelper
  9. 怎样让一个心浮气躁的孩子静下心学习?
  10. PAT1030 Travel Plan (30)---DFS
  11. 性能测试--jmeter如何发送post请求【4】
  12. hadoop集群的搭建与配置(2)
  13. 解决网易云音乐登录接口-460问题
  14. 速读《现代软件工程——构建之法》有感
  15. Orcad Pspice仿真
  16. 产品 • 互联网产品经理和硬件产品经理
  17. mysql修改时间为东八区,mysql时区设置为东八区
  18. 【Nodejs】448- 深入学习 Node.js Buffer
  19. 临床医疗运营数据分析
  20. 步进电机应用c语言程序设计实例,51单片机调节步进电机应用C语言程序设计

热门文章

  1. java父类子类顺序_java父类子类內部程序的执行顺序
  2. java 用户日志_2020年阿里巴巴最全Java、架构师、大数据、算法PPT技术栈图册
  3. 同一Word文档不同尺寸(纸张)页面的混排方法
  4. Linux上快速搭建Jenkins服务器 实现持续集成开发
  5. Interfacing to kdb+ from Java
  6. Java路径问题最终解决方案
  7. spring的log4j listener(webAppRootKey)
  8. leecode_二叉树中序遍历
  9. C#调用SQL Server分页存储过程
  10. 暴力求解——最大乘积 Maximum Product,UVa 11059