博客
关于我
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(3)DML详解
查看>>
MySQL(4)运算符 | 关联查询详解
查看>>
MySQL(5)条件查询 | 单行函数 | 事务详解
查看>>
Mysql,group by分组查询、order by排序查询、join连接查询、union联合查询
查看>>
Mysql,sql文件导入和导出
查看>>
MYSQL:int类型升级到bigint,对PHP开发语言影响
查看>>
Mysql:mysql 5.X 报错 ERROR 1193 (HY000): Unknown system variable ‘validate_password_length‘
查看>>
MySQL:MySQL执行一条SQL查询语句的执行过程
查看>>
Mysql:SQL性能分析
查看>>
mysql:SQL按时间查询方法总结
查看>>
MySQL:什么样的字段适合加索引?什么样的字段不适合加索引
查看>>
MySQL:判断逗号分隔的字符串中是否包含某个字符串
查看>>
MySQL:某个ip连接mysql失败次数过多,导致ip锁定
查看>>
MySQL:索引失效场景总结
查看>>
Mysql:避免重复的插入数据方法汇总
查看>>
MyS中的IF
查看>>
M_Map工具箱简介及地理图形绘制
查看>>
m_Orchestrate learning system---二十二、html代码如何变的容易
查看>>
M×N 形状 numpy.ndarray 的滑动窗口
查看>>
m个苹果放入n个盘子问题
查看>>