An intuitive Prim algorithm impl.

#include <vector>
#include <iostream>
#include <queue>
#include <unordered_map>
#include <unordered_set>
using namespace std; struct Edge
{
Edge() :s(), t(), d() {}
Edge(unsigned rs, unsigned rt, unsigned rd) :
s(rs), t(rt), d(rd) {} unsigned s;
unsigned t;
unsigned d; bool operator()(const Edge &e1, const Edge &e2)
{
return e1.d > e2.d;
}
}; int main()
{
long n, m; cin >> n >> m;
// from -> to -> (length, id)
unordered_map<unsigned, unordered_map<unsigned, unsigned>> g;
for (int i = ; i < m; i++)
{
unsigned a, b, d; cin >> a >> b >> d;
g[a][b] = g[b][a] = d;
}
unsigned s; cin >> s; unordered_set<unsigned> pickedSet; // linked node inx priority_queue<Edge, vector<Edge>, Edge> q;
for (auto &kv : g[s])
{
q.push(Edge(s, kv.first, kv.second));
}
pickedSet.insert(s); unsigned long long ret = ;
while (!q.empty())
{
Edge picked = q.top();
q.pop();
if (pickedSet.count(picked.t)) continue; pickedSet.insert(picked.t); // add new choices
for (auto &kv : g[picked.t])
{
q.push(Edge(picked.t, kv.first, kv.second));
} ret += picked.d;
}
cout << ret << endl;
return ;
}

HackerRank "Prim's (MST) : Special Subtree"的更多相关文章

  1. prim求MST

    PRIM==>>MST模板 #include <iostream> using namespace std; #define typec int #define V 3 con ...

  2. HackerRank "Kruskal (MST): Really Special Subtree"

    Kruskal Algorithm is based on Union-Find - quite intuitive. #include <vector> #include <ios ...

  3. Prim求MST最小生成树

    最小生成树即在一个图中用最小权值的边将所有点连接起来.prim算法求MST其实它的主要思路和dijkstra的松弛操作十分相似 prim算法思想:在图中随便找一个点开始这里我们假定起点为“1”,以点1 ...

  4. hdu 4756 MST+树形dp ****

    题意:给你n(n = 1000)个二维点,第一个点是power plant,还有n - 1个点是dormitories.然后现在知道有一条寝室到寝室的边是不能连的,但是我们不知道是哪条边,问这种情况下 ...

  5. prim模板

    ]; int n; ][]; ]; int prim(){ int i,j,mi,v; ;i<n;i++){ d[i]=map[][i]; vis[i]=; } ;i<=n;i++){ m ...

  6. 最小生成树之Prim算法--蓝白点思想

    Prim算法: 以前一直不是很明白,Prim算法,今天就来终结一下. Prim算法采用与Dijkstra.Bellman-Ford算法一样的“蓝白点”思想:白点代表已经进入最小生成树的点,蓝点代表未进 ...

  7. 堆优化Prim 最小生成树 模板

    #include <bits/stdc++.h> using namespace std; const int MAXN = 5005; const int MAXM = 200005; ...

  8. 图论算法(五)最小生成树Prim算法

    最小生成树\(Prim\)算法 我们通常求最小生成树有两种常见的算法--\(Prim\)和\(Kruskal\)算法,今天先总结最小生成树概念和比较简单的\(Prim\)算法 Part 1:最小生成树 ...

  9. bzoj 3714

    题意:n<=2000的盒子,有一些里面有球,再给你所有c[i][j](1<=i<=j<=n),即告诉你[i,j]里面球的总数的奇偶性需要花费c[i][j],现在求知道所有的盒子 ...

随机推荐

  1. C++ const、volatile、mutable的用法 (转)

      const.volatile.mutable的用法 鸣谢作者: http://blog.csdn.net/wuliming_sc/article/details/3717017 const修饰普通 ...

  2. (Python)导出指定文件夹中as文件的完全限定类名

    AS3程序在编译的过程中,有一个特点是这样的,不管是项目中的类,还是标准库或者第三方库的类,编译的时候只会把用到的那些类文件编译进去,也就是说,某一些类,只要没有被主程序引用到,那这个文件是不会被编译 ...

  3. python练习题代码

    1.打印出相应规则的字母 zm='ABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> for i in range(0,len(zm)): if i==0:  print ...

  4. Java Script

    一.JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司 ...

  5. 回车键转tab键

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head ...

  6. WPF笔记

    1.使用TypeConvert类将XAML标签的Attribute与对象的Propety进行映射 由于XAML所有属性=属性值,其中属性值必须是字符串,当属性值不是字符串时需要添加将该属性值转换成字符 ...

  7. Linux设备驱动中的并发控制

    1.并发是指多个执行单元同时.并行的执行.并发的执行单元对共享资源的访问很容易导致竞态. 在 Linux 内核中,主要的竞态发生于如下几种情况: ①对称多处理器(SMP)的多个 CPU ②单CPU内进 ...

  8. iOS开发拓展篇—应用之间的跳转和数据传递

    iOS开发拓展篇—应用之间的跳转和数据传 说明:本文介绍app如何打开另一个app,并且传递数据. 一.简单说明 新建两个应用,分别为应用A和应用B. 实现要求:在appA的页面中点击对应的按钮,能够 ...

  9. .htaccess保护目录与文件

    一般来说很多虚拟主机预设是没有开启保护网站主机目录下的文件,其实很危险的,假若你的目录下忘记放置index文件,那很可能您目录就被看光,一个不小心很可能重要资料就被拿走,这是蛮严重的一件事情.如果是L ...

  10. LG1268树的重量

    #include<bits/stdc++.h> using namespace std; #define N 35 #define INF 1e9 int dis[N][N],n,len, ...