https://codeforces.com/problemset/problem/1095/F

题意

给你n个互不相通的点,每个点有权值ai,题目要求将n个点连接生成最小生成树,连接两点的代价是这两个点的权值之和,但是,题目又给你m个特惠,每一个特惠都指定两个点一个特价:x,y,w,他们相连接不一定要以权值为代价,可以使用特价w代替,求代价最小值。

思路

  1. 使用kul建立最小生成树
  2. 选出权值最小的点,e[++t]记录它与其他所有点,以及这两点连接的代价
  3. e[++t]记录特惠。
  4. 针对数组e的w进行从小到大的快排
  5. fa[i] = i ( i 从1到n)
  6. for(i , 1 , t) (遍历e数组)
  7. 并查集的内容,记录连接次数
  8. 连接次数到n-1就退出
  9. 输出答案
  10. 用prim的话,你得做加边操作(可能用到前向星(数组模拟邻接表)),然后循环n-1次,每次去遍历当前节点的连接边,太过麻烦,而且这题是稀疏图,适合使用kul算法。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5e5 + 10, inf = 0x3f3f3f3f3f3f3f3f;
struct node{int u,v,w;bool operator < (const node& A) const{return w < A.w;}
}e[N];
int fa[N],a[N],MinIndex,Min = inf,t,times,ans;
int find(int x){if (fa[x] != x) return fa[x] = find(fa[x]);return x;
}
signed main()
{ios::sync_with_stdio(false);int n,m;cin >> n >> m;for (int i = 1; i <= n ;i++){cin >> a[i];if (Min > a[i])Min = a[i],MinIndex = i;}for (int i = 1; i <= n; i++){if (i != MinIndex)e[++t].u = MinIndex,e[t].v = i,e[t].w = Min + a[i];}for (int i = 1; i <= m; i++){t++;cin >> e[t].u >> e[t].v >> e[t].w;}sort(e+1,e+1+t);for (int i = 1; i <= n; i++) fa[i] = i;for (int i = 1; i <= t; i++){int u = e[i].u, v = e[i].v;if (find(u) != find(v)){fa[find(u)] = find(v);ans += e[i].w;times++;if (times == n-1) break;}}cout << ans << "\n";return 0;
}

Codeforces Round #529 (Div. 3) F(kul最小生成树)相关推荐

  1. Codeforces Round #529 (Div. 3) F. Make It Connected(最小生成树)

    AC 最小生成树,建边的时候不需要N2{N^2}N2,首先N个点需要N-1条边,N个点的权值都会被计算,一些顶点会重复计算.我们让重复计算的点是权值最小的点,就可以保证生成树权值最小 将特殊边加到边集 ...

  2. [CF]Codeforces Round #529 (Div. 3)

    [CF]Codeforces Round #529 (Div. 3) C. Powers Of Two Description A positive integer xx is called a po ...

  3. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

  4. Codeforces Round #644 (Div. 3) F.Spy-string

    Codeforces Round #644 (Div. 3) F.Spy-string 题目链接 You are given n strings a1,a2,-,an: all of them hav ...

  5. Codeforces Round #849 (Div. 4) F. Range Update Point Query

    Codeforces Round #849 (Div. 4) F. Range Update Point Query 题目大意: 给一串数字,有两个操作: 操作1:将 l − r l-r l−r 的数 ...

  6. Codeforces Round #538 (Div. 2) F. Please, another Queries on Array? 线段树 + 欧拉函数

    传送门 文章目录 题意: 思路: 题意: 给你一个序列aaa,你需要实现两种操作: (1)(1)(1) 将[l,r][l,r][l,r]的aia_iai​都乘rrr. (2)(2)(2) 求ϕ(∏i= ...

  7. Codeforces Round #742 (Div. 2) F. One-Four Overload 构造 + 二分图染色

    传送门 文章目录 题意: 思路: 题意: 给你一个n∗mn*mn∗m的矩形,包含...和XXX,你有两种颜色,你需要给...染色使得每个XXX上下左右相邻的...其两种颜色个数相同,输出一种合法方案. ...

  8. Codeforces Round #740 (Div. 2) F. Top-Notch Insertions 线段树 / 平衡树 + 组合数学

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑最终的序列是什么鸭子的,首先序列肯定单调不降,也就是a1≤a2≤a3≤...≤ana_1\le a_2\le a_3\le ...\le a_na ...

  9. Codeforces Round #585 (Div. 2) F. Radio Stations 2-sat + 神仙建模

    传送门 文章目录 题意: 思路: 题意: 你现在有ppp种电台,有nnn对关系(x,y)(x,y)(x,y)代表xxx电台或yyy电台中至少有一个,mmm对关系(x,y)(x,y)(x,y)代表xxx ...

最新文章

  1. [CLR via C#]25. 线程基础
  2. LeetCode - 413. Arithmetic Slices - 含中文题意解释 - O(n) - ( C++ ) - 解题报告
  3. 《基于张量网络的学习入门》学习笔记3
  4. Android:生命周期案例
  5. c# 获取路径的盘符_c#获取驱动器盘符
  6. Strus2第一次课:dom4j操作xml
  7. Hadoop CDH4.5 MapReduce MRv1 HA方案实战
  8. 2019新悦动打火困难解决了吗_悦动大面积存在启动困难北京现代检查不出原因就换零件...
  9. GHOSTXPSP3电脑爱好者V9.9美化修正版
  10. java flex blazeds_使用BlazeDS实现Java和Flex通信
  11. 【每日一题】一起冲击蓝桥杯吧——Day2【蓝桥真题】
  12. 德国GMX Email免费邮箱服务65GB超大邮件存储空间
  13. 【opencv】18.数字图像一阶导数、二阶导数的数学原理
  14. 如何回复客户英文邮件
  15. 如此美妙,Python 处理CSV、JSON和XML数据的方法真简便
  16. Selenium基础知识 多窗口处理
  17. 【BugKu-CTF论坛writeup(杂项)】图穷匕见
  18. wps画流程图交叉弧形_WPS3分钟画出高逼格的流程图
  19. 数据结构中的有序和无序
  20. 设计师值得收藏的5个设计网站

热门文章

  1. Web学习笔记-中期项目(拳皇)
  2. 编程大神都在用的6个编程网站,一个月轻松学会编程,好用到不行
  3. CTR 预测理论(九):Boosting 集成算法中 Adaboost, GBDT 与 XGBoost 的区别
  4. 怎样安全卸载无用的驱动程序方法
  5. 法规标准-ISO 17361标准解读
  6. MACAPP音视频开发遇坑
  7. 线程与进程,http、https(post、get),socket(tcp、udp)的拆包和粘包,protocol buffer、大头小头简述
  8. CSS命名规范 BEM
  9. org.springframework.http.converter.HttpMessageNotReadableException异常解决
  10. 计算机程序员四级考试试题,计算机等级考试四级