题目链接:https://www.luogu.org/problemnew/show/P3366

思路:

求最小生成树的模板题,求MST有两种算法——Prim、Kruskal。

两者区别:Prim在稠密图中比Kruskal优,在稀疏图中比Kruskal劣。Prim是以更新过的节点的连边找最小值,Kruskal是直接将边排序。

两者其实都是运用贪心的思路

我使用的Prim算法(邻接表实现),head是表头结点数组,a是表结点数组,len记录未加入生成树的结点到生成树的最小距离,vis用来记录结点是否加入生成树。

使用邻接表的原因是邻接矩阵虽然耗空间小,但它只能表示边的信息,而不能表示点,所以还需要O(n)的枚举复杂度或比邻接表更多的内存来存储与边相关的信息,

所以使用邻接表的效率更高。

 #include<bits/stdc++.h>
#define R register int
using namespace std; typedef pair<int,int> PII;
struct node{
int v,w,next;
}a[]; //表结点 int n,m,k,cnt,sum,x,y,z;
int head[],len[],vis[];
priority_queue<PII,vector<PII>,greater<PII> > pq; void add(int u,int v,int w){
a[++k].v=v;
a[k].w=w;
a[k].next=head[u];
head[u]=k;
} void prim(){
len[]=;
pq.push(make_pair(,));
while(!pq.empty()&&cnt<n){
int l=pq.top().first,m=pq.top().second;
pq.pop();
if(!vis[m]){
cnt++;
vis[m]=;
sum+=l;
for(R i=head[m];i!=-;i=a[i].next){
if(!vis[a[i].v]&&a[i].w<len[a[i].v])
len[a[i].v]=a[i].w,pq.push(make_pair(a[i].w,a[i].v));
}
}
}
} int main(){
memset(head,-,sizeof(head));
memset(len,0x3f,sizeof(len));
scanf("%d%d",&n,&m);
while(m--){
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
prim();
if(cnt==n)
printf("%d\n",sum);
else
printf("orz\n");
return ;
}

luoguP3366 [模板] 最小生成树的更多相关文章

  1. 模板<最小生成树>

    转载 最小生成树浅谈 这里介绍最小生成树的两种方法:Prim和Kruskal. 两者区别:Prim在稠密图中比Kruskal优,在稀疏图中比Kruskal劣.Prim是以更新过的节点的连边找最小值,K ...

  2. [洛谷P3366] [模板] 最小生成树

    存个模板,顺便复习一下kruskal和prim. 题目传送门 kruskal 稀疏图上表现更优. 设点数为n,边数为m. 复杂度:O(mlogm). 先对所有边按照边权排序,初始化并查集的信息. 然后 ...

  3. P3366 (模板)最小生成树

    2019-01-30 最小生成树基本算法 定义: 给定一个边带权的无向图G=(V,E),n=|V|,m=|E|,由V中全部n个定点和E中n-1条边构成的无向连通子图被称为G的一颗生成树. 边的权值之和 ...

  4. 模板——最小生成树prim算法&&向前星理解

    通过最小生成树(prim)和最短路径优化引出的向前星存图,时至今日才彻底明白了.. head[i]存储的是父节点为i引出的最后一条边的编号, next负责把head[i]也就是i作为父节点的所有边连接 ...

  5. 模板——最小生成树kruskal算法+并查集数据结构

    并查集:找祖先并更新,注意路径压缩,不然会时间复杂度巨大导致出错/超时 合并:(我的祖先是的你的祖先的父亲) 找父亲:(初始化祖先是自己的,自己就是祖先) 查询:(我们是不是同一祖先) 路径压缩:(每 ...

  6. 【洛谷 p3366】模板-最小生成树(图论)

    题目:给出一个无向图,求出最小生成树,如果该图不连通,则输出orz. 解法:Kruskal求MST. 1 #include<cstdio> 2 #include<cstdlib> ...

  7. luoguP3366 【模板】最小生成树 x

    P3366 [模板]最小生成树 2.4K通过 6.3K提交 题目提供者HansBug 标签 云端↑ 生成树 难度 普及- 时空限制 1s / 128MB 题目描述 如题,给出一个无向图,求出最小生成树 ...

  8. 洛谷P3366 【模板】最小生成树

    P3366 [模板]最小生成树 319通过 791提交 题目提供者HansBug 标签 难度普及- 提交  讨论  题解 最新讨论 里面没有要输出orz的测试点 如果你用Prim写了半天都是W- 题目 ...

  9. POJ 2031 Building a Space Station 最小生成树模板

    题目大意:在三维坐标中给出n个细胞的x,y,z坐标和半径r.如果两个点相交或相切则不用修路,否则修一条路连接两个细胞的表面,求最小生成树. 题目思路:最小生成树树模板过了,没啥说的 #include& ...

随机推荐

  1. appium 3-4-1034等待、日志、性能数据、xpath定位、web driver协议

    1.等待 1.1精确等待 sleep 不推荐 @Test public void testWait1() throws InterruptedException{ day_time(); Thread ...

  2. java study1

    java安装 java优势-跨平台:一次编写,到处运行. jdk开发工具包,提供了开发人员需要的开发工具.jdk中包含了jre jre java的运行环境,负责程序的运行,jre中,包含程序运行时需要 ...

  3. 深度学习RNN实现股票预测实战(附数据、代码)

    背景知识 最近再看一些量化交易相关的材料,偶然在网上看到了一个关于用RNN实现股票预测的文章,出于好奇心把文章中介绍的代码在本地跑了一遍,发现可以work.于是就花了两个晚上的时间学习了下代码,顺便把 ...

  4. 洛谷::P1972 [SDOI2009]HH的项链

    题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链 ...

  5. Redis如何存储对象与集合示例详解

      前言 大家都知道在项目中,缓存以及mq消息队列可以说是不可或缺的2个重要技术.前者主要是为了减轻数据库压力,大幅度提升性能.后者主要是为了提高用户的体验度,我理解的是再后端做的一个ajax请求(异 ...

  6. HTML5进阶

    内容: 1.geolocation元素 2.video元素和audio元素 3.localStorage 4.WebWorker 5.WebSQL.IndexedDB 6.文件操作.文件拖拽新概念 7 ...

  7. VC字符串转换常用函数

    最近在做一些关于VC的ActiveX小插件,经常会遇到字符串处理的问题,狂查CSDN和MSDN,结果并不理想.先说明一下,相关处理函数在VC++6.00测试通过.也许很多人不能理解,现在都什么年代了, ...

  8. Spring MVC 学习笔记1 - First Helloworld by Eclipse【& - java web 开发Tips集锦】

    Spring MVC 学习笔记1 - First Helloworld by Eclipse reference:http://www.gontu.org 1. 下载 Spring freamwork ...

  9. uva-10305-水题-拓扑排序

    输入n,m,n代表点数,m代表边数(i,j),排序时i在j前面,没出现的点随意排 #include <iostream> #include<stdio.h> #include& ...

  10. PHP Token(令牌)设计 避免重复提交

    设计目标: 避免重复提交数据. 检查来路,是否是外部提交 匹配要执行的动作(如果有多个逻辑在同一个页面实现,比如新增,删除,修改放到一个PHP文件里操作) 这里所说的token是在页面显示的时候,写到 ...