博客
关于我
cf 1095f kruskal模板题 kruskal适合稀疏图 prim适合稠密图
阅读量:293 次
发布时间:2019-03-03

本文共 1595 字,大约阅读时间需要 5 分钟。

题意:

n个点,每个点有一个权值记作node[i],在第i个点和第j个点之间连无向边的代价为node[i]+node[j],有m条额外边可选择,第u个点和第v个点连无向边的代价为w,额外边可以用可以不用。问连边使任意两点可连通的总代价是多少。

数据范围:1 <= n <= 2e5 , 0 <= m<= 2e5。

题解:

1.kruskal算法求最小生成树模板题。

2.找到权值最小的点t,将除t之外的点和t相连是原有的边,与m条额外边共同组成可选的边集合E。

3.n <= 2e5 ,因为边是无向的且包括原有的边和额外边,故总边数cnt <= 8e5,但远远小于2e5 * 2e5。这个是稀疏图,应该使用kruskal算法。

4.n个顶点m条边的最小生成树,kruskal复杂度O(m*logm)适合稀疏图prim复杂度O(n²)适合稠密图

#include
#define N 800005using namespace std ;int n , m , cnt = 0 ;long long node[N] ;int pre[N] ;struct Edge{ int u , v ; long long weight ;} edge[N] ;int t ;int find(int x){ if(x == pre[x]) return pre[x] ; pre[x] = find(pre[x]) ; return pre[x] ; }bool cmp(Edge a , Edge b){ return a.weight < b.weight ;}void kruskal(){ int i , j ; int u , v ; int ru , rv ; long long sum = 0 ; sort(edge , edge + cnt , cmp) ; for(i = 0 ; i < cnt ; i ++) { u = edge[i].u ; v = edge[i].v ; ru = find(u) ; rv = find(v) ; if(ru == rv) continue ; pre[ru] = rv ; sum += edge[i].weight ; } printf("%lld" , sum) ;}int main(){ int i , j ; int u , v ; Edge a ; long long min1 = 1e18 ; scanf("%d%d" , &n , &m) ; for(i = 1 ; i <= n ; i ++) { scanf("%lld" , &node[i]) ; if(node[i] < min1) { min1 = node[i] ; t = i ; } pre[i] = i ; } for(i = 1 ; i <= n ; i ++) { if(i == t) continue ; a.u = t ; a.v = i ; a.weight = node[t] + node[i] ; edge[cnt ++] = a ; a.u = i ; a.v = t ; edge[cnt ++] = a ; } for(i = 1 ; i <= m ; i ++) { scanf("%d%d%lld" , &u , &v , &a.weight) ; a.u = u ; a.v = v ; edge[cnt ++] = a ; a.u = v ; a.v = u ; edge[cnt ++] = a ; } kruskal() ; }

 

转载地址:http://bpml.baihongyu.com/

你可能感兴趣的文章
MySQL“被动”性能优化汇总
查看>>
MySQL、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>
MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>
MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
查看>>
MySQL不同字符集及排序规则详解:业务场景下的最佳选
查看>>
Mysql不同官方版本对比
查看>>
MySQL与Informix数据库中的同义表创建:深入解析与比较
查看>>
mysql与mem_细说 MySQL 之 MEM_ROOT
查看>>
MySQL与Oracle的数据迁移注意事项,另附转换工具链接
查看>>
mysql丢失更新问题
查看>>
MySQL两千万数据优化&迁移
查看>>
MySql中 delimiter 详解
查看>>
MYSQL中 find_in_set() 函数用法详解
查看>>