hihoCoder-1109-堆优化的Prim
优先队列是由堆组成的,所以当我们使用优先队列对Prim进行优化时,就把这种优化叫做堆优化。
它的算法核心思想就是每次向后找边,每个pair存的都是下一个点,以及边权。我们对于已经走过的点就避开,这样就不会形成环。
因为我们已知的点是标记过的,我们只要下一个点不走已知的点肯定不会形成环路。因为第一个点已经标记过,所以我们之后只用做n-1次,找n-1个点就可以了,顺便找了n-1条边,这时候一颗最小生成树就建成了。
对于那pair我们把权值放在第一位,然后调用系统的升序就可以了,就不用自己写排序的函数了。因为优先队列对pair进行排序的时候默认是按照第一个数字进行排序的。
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 100010;
typedef pair<int, int> p;
vector<p> vec[maxn];
int vis[maxn];
int main()
{
int n, m, u, v, val;
scanf("%d%d", &n, &m);
for (int i = 0; i < m;i++) {
scanf("%d%d%d", &u, &v, &val);
vec[u].push_back(p(val, v));
vec[v].push_back(p(val, u));
}
priority_queue<p, vector<p>, greater<p>> pq;
vis[1] = 1;
for (int i = 0; i < vec[1].size();i++)
pq.push(vec[1][i]);
int ans = 0;
while (!pq.empty()) {
p now = pq.top();
pq.pop();
if (!vis[now.second]) {
ans += now.first;
vis[now.second] = 1;
}
for (int i = 0; i < vec[now.second].size();i++) {
if (!vis[vec[now.second][i].second])
pq.push(vec[now.second][i]);
}
}
printf("%d\n", ans);
return 0;
}
hihoCoder-1109-堆优化的Prim的更多相关文章
- hihocoder 1109 堆优化的Prim算法
题目链接:http://hihocoder.com/problemset/problem/1109 , 最小生成树 + 堆优化(优先队列). 可以用优先队列,也可以自己手动模拟堆,为了练手,我两种都试 ...
- hiho一下 第二十九周 最小生成树三·堆优化的Prim算法【14年寒假弄了好长时间没搞懂的prim优化:prim算法+堆优化 】
题目1 : 最小生成树三·堆优化的Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 回到两个星期之前,在成功的使用Kruscal算法解决了问题之后,小Ho产生 ...
- 图论之堆优化的Prim
本题模板,最小生成树,洛谷P3366 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边 ...
- hihoCoder#1109 最小生成树三·堆优化的Prim算法
原题地址 坑了我好久...提交总是WA,找了个AC代码,然后做同步随机数据diff测试,结果发现数据量小的时候,测试几十万组随机数据都没问题,但是数据量大了以后就会不同,思前想后就是不知道算法写得有什 ...
- Prim算法堆优化
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> ...
- POJ-1287.Network(Kruskal + Prim + Prim堆优化)
Networking Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19674 Accepted: 10061 Desc ...
- 求最小生成树(暴力法,prim,prim的堆优化,kruskal)
求最小生成树(暴力法,prim,prim的堆优化,kruskal) 5 71 2 22 5 21 3 41 4 73 4 12 3 13 5 6 我们采用的是dfs的回溯暴力,所以对于如下图,只能搜索 ...
- dijkstra(最短路)和Prim(最小生成树)下的堆优化
dijkstra(最短路)和Prim(最小生成树)下的堆优化 最小堆: down(i)[向下调整]:从第k层的点i开始向下操作,第k层的点与第k+1层的点(如果有)进行值大小的判断,如果父节点的值大于 ...
- 图论——最小生成树prim+邻接表+堆优化
今天学长对比了最小生成树最快速的求法不管是稠密图还是稀疏图,prim+邻接表+堆优化都能得到一个很不错的速度,所以参考学长的代码打出了下列代码,make_pair还不是很会,大体理解的意思是可以同时绑 ...
- P3366 【模板】最小生成树(堆优化prim)
堆优化prim #include<cstdio> #include<cstring> #include<queue> using namespace std; st ...
随机推荐
- __str__,__repr__
目录 __str__ __repr__ __str__ 打印时触发 class Foo: pass obj = Foo() print(obj) <__main__.Foo object at ...
- foreach循环报NPE空指针异常
前言 最近debug时忽然发现,如果一个集合赋值为null,那么对该集合进行foreach循环(也叫增强for循环)时,会报NPE(即空指针异常NullPointerException). 代码如下: ...
- 2017 Multi-University Training Contest - Team 1 KazaQ's Socks
Problem Description KazaQ wears socks everyday. At the beginning, he has n pairs of socks numbered f ...
- 转 DG switchover
I. Pre-Switchover Checks These steps should be completed before the switchover planned maintenance w ...
- Azkaban的功能特点(二)
Azkaban是什么?(一) 不多说,直接上干货! http://www.cnblogs.com/zlslch/category/938837.html Azkaban的功能特点 它具有如下功能特点: ...
- js 正则验证url
var reg = '[a-zA-z]+://[^\s]*';//正则var url = $('#add [name=notice_url]').val();if(url.length >0){ ...
- PHP使用Socket发送字节流
例如,需要发送以下数据 struct header { int type; // 消息类型 int length; // 消息长度 } struct MSG_Q2R2DB_PAYRESULT { ...
- 安装wamp时出现httpd.exe无法找到组件MSVCR100.dll的解决办法
很多朋友在安装wamp server时会出现以下错误,安装之后无法启动httpd.exe服务. --------------------------- httpd.exe - 无法找到组件 ----- ...
- GIT本地pull远程失败,本地tag与远程仓库不匹配问题
2019-05-15 问题现象: 1.GIT本地目录无法pull下远程仓库已新增的内容,一直提示Already up to date 2.git log 命令显示没有远端的tag版本 $git lo ...
- substring()和substr()的使用以及区别
在JavaScript中,通常会用到截取,那所谓截取呢,其实就是要获得被截取元素的某个位置到某个位置的内容,那么JS给我提供了substring和substr这两种方法: 这两种截取的方式有什么区别呢 ...