博客
关于我
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中的约束
查看>>
MySQL中的表是什么?
查看>>
mysql中穿件函数时候delimiter的用法
查看>>
Mysql中索引的分类、增删改查与存储引擎对应关系
查看>>
Mysql中索引的最左前缀原则图文剖析(全)
查看>>
MySql中给视图添加注释怎么添加_默认不支持_可以这样取巧---MySql工作笔记002
查看>>
Mysql中获取所有表名以及表名带时间字符串使用BetweenAnd筛选区间范围
查看>>
Mysql中视图的使用以及常见运算符的使用示例和优先级
查看>>
Mysql中触发器的使用示例
查看>>
Mysql中设置只允许指定ip能连接访问(可视化工具的方式)
查看>>
mysql中还有窗口函数?这是什么东西?
查看>>
mysql中间件
查看>>
MYSQL中频繁的乱码问题终极解决
查看>>
MySQL为Null会导致5个问题,个个致命!
查看>>
MySQL为什么不建议使用delete删除数据?
查看>>
MySQL主从、环境搭建、主从配制
查看>>
Mysql主从不同步
查看>>
mysql主从同步及清除信息
查看>>
MySQL主从同步相关-主从多久的延迟?
查看>>