prim模板
int vis[];
int n;
int map[][];
int d[];
int prim(){
int i,j,mi,v;
for(i=;i<n;i++){
d[i]=map[][i];
vis[i]=;
}
for(i=;i<=n;i++){
mi=<<;
for(j=;j<n;j++){
if(!vis[j] && mi>d[j]){
v=j;
mi=d[j];
}
}
vis[v]=;
for(j=;j<n;j++)
if(!vis[j] && d[j]>map[v][j])
d[j]=map[v][j];
}
for(i=;i<n;i++) d[]+=d[i];
return d[];
}
heap优化
http://www.nocow.cn/index.php/Prim%E7%AE%97%E6%B3%95
/*
二叉堆优化Prim算法
Author:YangZX
Date:9.11 2011
*/
#include <iostream>
using namespace std;
const int MAXV = , MAXE = , INF = (~0u)>>;
struct edge{
int t, w, next;
}es[MAXE * ];
int h[MAXV], cnt, n, m, heap[MAXV], size, pos[MAXV], dist[MAXV];
void addedge(int x, int y, int z)
{
es[++cnt].t = y;
es[cnt].next = h[x];
es[cnt].w = z;
h[x] = cnt;
} void heapup(int k)
{
while(k > ){
if(dist[heap[k>>]] > dist[heap[k]]){
swap(pos[heap[k>>]], pos[heap[k]]);
swap(heap[k>>], heap[k]);
k>>=;
}else
break;
}
}
void heapdown(int k)
{
while((k<<) <= size){
int j;
if((k<<) == size || dist[heap[(k<<)]] < dist[heap[(k<<)+]])
j = (k<<);
else
j = (k<<) + ;
if(dist[heap[k]] > dist[heap[j]]){
swap(pos[heap[k]], pos[heap[j]]);
swap(heap[k], heap[j]);
k=j;
}else
break;
}
}
void push(int v, int d)
{
dist[v] = d;
heap[++size] = v;
pos[v] = size;
heapup(size);
}
int pop()
{
int ret = heap[];
swap(pos[heap[size]], pos[heap[]]);
swap(heap[size], heap[]);
size--;
heapdown();
return ret;
} int prim()
{
int mst = , i, p;
push(, );
for(i=; i<=n; i++)
push(i, INF);
for(i=; i<=n; i++){
int t = pop();
mst += dist[t];
pos[t] = -;
for(p = h[t]; p; p = es[p].next){
int dst = es[p].t;
if(pos[dst] != - && dist[dst] > es[p].w){
dist[dst] = es[p].w;
heapup(pos[dst]);
heapdown(pos[dst]);
}
}
}
return mst;
}
int main()
{
cin>>n>>m;
for(int i=; i<=m; i++){
int x, y, z;
cin>>x>>y>>z;
addedge(x, y, z);
addedge(y, x, z);
}
cout<<prim()<<endl;
return ;
}
prim模板的更多相关文章
- HDU1875+Prim模板
https://cn.vjudge.net/problem/HDU-1875 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府 ...
- HDU 1223 还是畅通工程(最小生成树prim模板)
一个很简单的prim模板,但虽然是模板,但也是最基础的,也要脱离模板熟练打出来 后期会更新kruskal写法 #include<iostream> #include<cstdio&g ...
- Kruskal && Prim模板
1. Kruskal(并查集模板): /* Kruskal:并查集实现,记录两点和距离,按距离升序排序,O (ElogE) */ struct Edge { int u, v, w; bool ope ...
- prim模板题
题目链接:http://acm.hrbeu.edu.cn/index.php?act=problem&id=1223 #include <cstdio> #include < ...
- 最小生成树(kruskal模版 Prim模板)
http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2144&cid=1186 最小生成树,最重要的是了解思想 稠密图用Prim,稀疏图用Kru ...
- poj 1258 Agri-Net prim模板 prim与dijkstra的区别
很裸地求最小生成树的题目.题意就不多说了,最重要的就是记录一下学会了prim算法. 初学prim,给我的第一感觉就是和dijkstra好像啊,感觉两者的区别还是有的: 1:prim是求最小生成树的算法 ...
- prim 模板
#include<cstdio> #include<vector> #include<cstring> #include<set> #define ma ...
- 最小生成树模板【kruskal & prim】
CDOJ 1966 Kruskal 解法 时间复杂度O(mlogm) m为边数,这里主要是边排序占时间,后面并查集还好 #include <cstdio> #include <cst ...
- 最小生成树(次小生成树)(最小生成树不唯一) 模板:Kruskal算法和 Prim算法
Kruskal模板:按照边权排序,开始从最小边生成树 #include<algorithm> #include<stdio.h> #include<string.h> ...
随机推荐
- ios数组基本用法和排序
1.创建数组 // 创建一个空的数组 NSArray *array = [NSArray array]; // 创建有1个元素的数组 array = [NSArray arrayWithObject: ...
- android 视频播放器的INTENT-FILTER属性
<intent-filter> <action android:name="android.intent.action.VIEW&quo ...
- 如何上传base64编码图片到七牛云
接口说明 POST /putb64/<Fsize>/key/<EncodedKey>/mimeType/<EncodedMimeType>/crc32/<Cr ...
- 解决mac 10.11 以后 无法使用未签名第三驱动
解决 最新版 mac 系统 无法使用未签名第三驱动 10.12.多 我的情况是 10.11.4 Beta (15E27e) 使用绿联usb网卡不正常. 下面的命令为检测驱动是否装载的一些命令.sudo ...
- ubuntu16.04安装kde桌面出错: /var/cache/apt/archives/kde-config-telepathy-accounts_4%3a15.12.3-0ubuntu1_amd64.deb
出错提示: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 kubuntu-desktop 已经是最新版 (1.338). 您可能需要运行“apt-get - ...
- jquery自动识别输入的都是数字
//自动判断输入的书否为正整数 function wds_purchase_keyup(t) { var val = $(t).val(); -]+$/.test(val) && va ...
- [转] iOS多线程编程之NSOperation和NSOperationQueue的使用
<iOS多线程编程之NSThread的使用> 介绍三种多线程编程和NSThread的使用,这篇介绍NSOperation的使用. 使用 NSOperation的方式有两种, 一种是用定义好 ...
- 怎么理解angularjs中的服务?
AngularJS中的服务其实就是提供一种方式抽取共用类库 比如说一些工具类方法,我们传统的做法就是自己写个 utility 类,把相关的工具方法填充到utility里面去,最后把utility类放到 ...
- BZOJ 1005 明明的烦恼 (组合数学)
题解:n为树的节点数,d[ ]为各节点的度数,m为无限制度数的节点数. 则 所以要求在n-2大小的数组中插入tot各序号,共有种插法: 在tot各序号排列中,插第一个节点的 ...
- hdoj 2544 最短路(最短路+Dijkstrea算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 思路分析:该问题给定一个无向图,要求求从起始点到终点的最短路径长度:可以使用dijkstra算法 ...