题意简述

\(n\)( \(1≤n≤2×10^5\) )个点,每个点 \(i\) 有一个点权 \(a_i\) ( \(1≤a_i≤2×10^{12}\) ),将两个点 \(i\),\(j\) 直接相连的花费是两个点的点权和 \(a_i+a_j\),并且对于特别的\(m\)( \(1≤m≤2×10^5\) )条边 \(u_i\) , \(v_i\) 可以通过花费 \(w\) 点费用连接,求使得所有点互相连通的最小费用。

我们可以从数据范围看出需要注意的事项:

分析1.从\(n\)和\(m\)的范围可以看出我们最终的复杂度是带 log 的。

分析2.从\(a_i\),很显然需要 long long

接下来就从分析1导入正题。

Solution

看到关键词"连边","最小费用","边权"。

想到什么了?这不是我们可爱的最小生成树吗!

然后上来敲了一手 Kruskal(不会最小生成树可以点这里),然后越打越不对劲——是不是忘了点东西——还可以用 \(a_i+a_j\) 直接连边。

好,于是就用 \(O(n^2)\) 来加边....不对啊,这复杂度直接爆了。

真的 \(n^2\) 条边都要用吗?似乎不是的。

对于一个图最少需要连 \(n-1\) 条边来使图连通,我们只需要以权值最小的点作为核心,他连出来的那一组边是最小的,且是能使图连通的,我们只需找到权值最小的点,把它与其他点相连的费用计算出来并进行 Kruskal。所以总共只需 \(O(n+m)\) 加边即可

之后用最小生成树算法就可以了,复杂度约为 \(O((n+m)log(n+m))\)。

代码

那么代码如下:

#include<bits/stdc++.h>
using namespace std;
#define file(a) freopen(#a".in","r",stdin),freopen(#a".out","w",stdout);
int n,m,fa[200010],cnt,deals[200010];
long long v[200010],ans,minn=1000000000010,mid;
struct edge
{
int u,v;
long long w;
}q[500010];//记得开到两倍n
bool cmp(edge a,edge b)
{
return a.w<b.w;
}
int find(int x)
{
return x==fa[x]?x:fa[x]=find(fa[x]);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
{
scanf("%lld",&v[i]);
fa[i]=i;
if(v[i]<minn)
{
minn=v[i];
mid=i;
}
}
for(int i=1;i<=n;++i)
{
if(i==mid) continue;
q[i].u=mid;q[i].v=i;
q[i].w=v[mid]+v[i];
}
for(int i=n+1;i<=n+m;++i)
{
scanf("%d%d%lld",&q[i].u,&q[i].v,&q[i].w);
}
sort(q+1,q+1+n+m,cmp);
for(int i=1;i<=n+m;++i)
{
int x=find(q[i].u),y=find(q[i].v);
if(x!=y)
{
fa[y]=x;
ans+=q[i].w;
}
}
printf("%lld",ans);
return 0;
}

题解 CF1095F 【Make It Connected】的更多相关文章

  1. [CF1095F]Make It Connected

    题目大意:给你$n(n\leqslant2\times10^5)$个点和$m(m\leqslant2\times10^5)$条边,第$i$个点点权为$a_i$.连接$u,v$两个点的代价为$a_u+a ...

  2. 算法与数据结构基础 - 图(Graph)

    图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...

  3. POJ 1737 Connected Graph 题解(未完成)

    Connected Graph Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3156   Accepted: 1533 D ...

  4. Educational Codeforces Round 37-E.Connected Components?题解

    一.题目 二.题目链接 http://codeforces.com/contest/920/problem/E 三.题意 给定一个$N$和$M$.$N$表示有$N$个点,$M$表示,在一个$N$个点组 ...

  5. 【生成树,堆】【CF1095F】 Make It Connected

    Description 给定 \(n\) 个点,每个点有点权,连结两个点花费的代价为两点的点权和.另外有 \(m\) 条特殊边,参数为 \(x,y,z\).意为如果你选择这条边,就可以花费 \(z\) ...

  6. 【CF1095F】 Make It Connected(最小生成树)

    题目链接 如果没有特殊边的话显然答案就是权值最小的点向其他所有点连边. 所以把特殊边和权值最小的点向其他点连的边丢一起跑最小生成树就行了. #include <cstdio> #inclu ...

  7. Solution: 题解 CF1196E Connected Component on a Chessboard

    感觉这题还可以 因为总空间比输入数量 不知高到哪里去了 ,所以完全不需要考虑放不下的问题 从贪心的角度考虑,如果要使相差数量巨大的\(b\)和\(w\)能够成功放下来,应该使这些方块尽量分散(似乎有点 ...

  8. [题解]codevs1001 舒适的路线

    h3 { font-family: Consolas; color: #339966 } .math { font-family: Consolas; color: gray } 题目描述 Descr ...

  9. codeforces CF475 ABC 题解

    Bayan 2015 Contest Warm Up http://codeforces.com/contest/475 A - Bayan Bus B - Strongly Connected Ci ...

随机推荐

  1. 《深入理解ES6》笔记——块级作用域绑定(1)

    本章涉及3个知识点,var.let.const,现在让我们了解3个关键字的特性和使用方法. var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方 ...

  2. H5活动全屏滚动页面在安卓智能电视TV调试

    前段时间公司做一个线上活动,在电视上商品促销.产品的要求是每个商品介绍刚好满一屏,按下遥控器向下键可以整屏切换.这种功能如果实在PC端,实现起来非常容易,引用jQuery插件就能实现.但是在安卓智能电 ...

  3. Java中读取 .properties 和 .xml 文件

    配置文件内容获取 总结内容 1. Java中为什么要使用配置文件 2. Java中常用的配置文件类型有哪些以及它们的特点 Properties配置文件 XML配置文件 总结 总结内容 1. Java中 ...

  4. Exchange批量删除邮件

    在实际工作中经常遇到以下问题:邮件发送给错误的收件人,简而言之就是邮件发错了,如果遇到群发更麻烦.Exchange中提供了批量删除邮件功能,当用户发现发送错误后,管理员可以检索并删除指定的邮件. 案例 ...

  5. 【转载】Java密钥库及keytool使用详解

    ---------------- 版权声明:本文为CSDN博主「adrninistrat0r」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https: ...

  6. DFS与N皇后问题

    DFS与N皇后问题 DFS 什么是DFS DFS是指深度优先遍历也叫深度优先搜索. 它是一种用来遍历或搜索树和图数据结构的算法 注:关于树的一些知识可以去看<树的概念及基本术语>这篇文章 ...

  7. C#面向抽象编程第二讲

    抽象编程怎么说呢,以观察者模式为例: 观察者模式有两个对象,一个是观察者,一个是可观察者(字面翻译很别扭observable),消息发布者(提供者). 第一层如下,三个对象A.B.C分别有一个接收消息 ...

  8. SSM整合_年轻人的第一个增删改查_新增

    写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...

  9. vue滚动分页加载

    做了一个项目,要求将后台数据滚动加载. 滚动加载必须要求后台传的接口中由pageSize和pageIndex两个参数,来判断每次传数据的条数和数据的页码. 首先要判断滑轮是向上滚动还是向下滚动,可以在 ...

  10. 2021.08.06 P4392 Sound静音问题(ST表)

    2021.08.06 P4392 Sound静音问题(ST表) [P4392 BOI2007]Sound 静音问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 序列a,求 ...