题目大意:给你$n(n\leqslant2\times10^5)$个点和$m(m\leqslant2\times10^5)$条边,第$i$个点点权为$a_i$。连接$u,v$两个点的代价为$a_u+a_v$或者一条连接$u,v$的边的边权。问连通的最小代价

题解:发现若不考虑特殊边,一定是点权最小的点连向其他点。于是建出由点权最小的点连向其他各点的边,边权为两点点权和。与特殊边一起跑最小生成树即可。

卡点:

C++ Code:

#include <algorithm>
#include <cstdio>
#define maxn 200010
int n, m;
int l[maxn << 1], r[maxn << 1], rnk[maxn << 1];
long long ans, a[maxn], w[maxn << 1];int f[maxn];
int find(int x) { return x == f[x] ? x : (f[x] = find(f[x])); }int main() {scanf("%d%d", &n, &m);for (int i = 1; i <= n; ++i) {scanf("%lld", a + i);rnk[i] = f[i] = i;}std::sort(rnk + 1, rnk + n + 1, [] (int x, int y) { return a[x] < a[y]; });const long long base = a[rnk[1]];const int L = rnk[1];for (int i = 1; i < n; ++i) {w[i] = a[rnk[i + 1]] + base;l[i] = L, r[i] = rnk[i + 1];rnk[i] = i;}for (int i = n; i < n + m; ++i) {scanf("%d%d%lld", l + i, r + i, w + i);rnk[i] = i;}std::sort(rnk + 1, rnk + n + m, [] (int x, int y) { return w[x] < w[y]; });int num = n - 1;for (int i = 1, u, v; i < n + m && num; ++i) {u = find(l[rnk[i]]), v = find(r[rnk[i]]);if (u != v) {f[u] = v;ans += w[rnk[i]];--num;}}printf("%lld\n", ans);return 0;
}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/10340017.html

[CF1095F]Make It Connected相关推荐

  1. trogan连接不上_解决连接不上网(Connection not connected).doc

    解决连接不上网(Connection not connected).doc 解决连接不上网(Connection not connected) The computer doesn't connect ...

  2. HDU 4635 Strongly connected(缩点、最多可加边数使得仍然非强连通)

    整理的算法模板合集: ACM模板 HDU 4635 Strongly connected Give a simple directed graph with N nodes and M edges. ...

  3. 网络模型--Densely Connected Convolutional Networks

    Densely Connected Convolutional Networks CVPR2017 best paper Code: https://github.com/liuzhuang13/De ...

  4. (全网率先解决)Pycharm在Debug的时候出现frames are not available;Variable:Connected

    先说说我的情况,这样可以让你对号入座. 我是本地笔记本电脑使用Pycharm,但是Pycharm的Python解释器连接的是远程的实验室linux服务器.也就是说,你猜到了,我的是Pycharm专业版 ...

  5. 程序运行过程中遇到“ORA-03114: not connected to ORACLE”的问题解决

    程序运行过程中遇到"ORA-03114: not connected to ORACLE"的问题解决 参考文章: (1)程序运行过程中遇到"ORA-03114: not ...

  6. ORA-01940: cannot drop a user that is currently connected 问题解析

    xxx为待删除的用户名 SQL> drop user xxx cascade; 删除数据库用户的时候经常会遇到这样的错误: ORA-01940: cannot drop a user that ...

  7. 【CF913F】Strongly Connected Tournament 概率神题

    [CF913F]Strongly Connected Tournament 题意:有n个人进行如下锦标赛: 1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概 ...

  8. 论文阅读:DENSELY CONNECTED CONVOLUTIONAL NETWORKS

    概述 作者观察到目前的深度网络有一个重要的特点是shorted connected,认为能够训练极深的网络很可能就是由于这个原因. 于是作者提出了Densely connected convoluti ...

  9. 对Keil在线烧录程序弹出“The firmware of the connected J-Link[SN:xxxxxxxx] does not support......的问题解决

    问题:最近下载并使用Keil_v5.29,在线烧录程序时出现"The firmware of the connected J-Link[SN:xxxxxxxx] does not suppo ...

最新文章

  1. 自动化测试selenium+java学习笔记
  2. 大咖来信|浪潮刘军:AI计算将成为“新基建”核心支撑之一
  3. node.js 多个异步过程判断执行是否完成
  4. Swift3.0语言教程使用指针创建和初始化字符串
  5. Java编程思想学习录(连载之:内部类)
  6. Y分钟学clojure
  7. idea刷新项目、清除项目缓存
  8. python3.5中import sqlite3报错:ImportError: No module named _sqlite3
  9. Intellij idea 出现错误 error:java: 无效的源发行版: 11解决方法
  10. java servlet 开发_Java之基于Servlet的Web开发简介
  11. unexpected end of file while looking for precompiled header directive解决方法
  12. leetcode力扣49. 字母异位词分组
  13. 嵌入式软件开发工程师的养成之路——从 推挽输出 开始
  14. 关于权限的数据库设计
  15. lintcode-medium-Longest Common Substring
  16. 昂达平板不能开机刷机_平板电脑不开机怎么刷机?昂达平板电脑刷机步骤
  17. Python画美国盾牌
  18. 【DL】——Warmup学习率调整策略
  19. 估值指标二把手——市净率
  20. RT-Thread在16届智能车竞赛双车接力组中的应用

热门文章

  1. linux rkt命令,rkt 1.13.0发布,CoreOS的容器引擎
  2. mysql iso 时间_mysql 中 时间和日期函数
  3. mysql 转置 动态_MySQL 行列转置
  4. Operations Manager 2007 R2系列之仪表板(多)视图
  5. PowerShell 远程执行任务
  6. 三星在美最高法院吐苦水,苹果设计专利索赔太多
  7. Android安全之应用签名验证
  8. lua urlencode urldecode URL编码
  9. WebApi单元测试记录
  10. 时间O(n)/空间O(1)实现长n字符串前m个移到末尾