当前位置: 首页 > news >正文

小红的图上加边【牛客tracker 每日一题】

小红的图上加边

时间限制:1秒 空间限制:256M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

小红有一张n nn个点m mm条边的无向图,每个节点的权值是a i a_iai
现在小红希望加边把这个图连成连通图,每次连接的代价是新形成的联通块的最大元素值,小红想知道最小需要消耗多少代价可以把这个图连成连通的。

输入描述:

第一行输入两个整数n nnm ( 1 ≤ n ≤ 10 5 ; 0 ≤ m ≤ 10 5 ) m( 1≤n≤10^5;0≤m≤10^5)m(1n105;0m105)表示点数和边数。
第二行输入n nn个整数a 1 , a 2 , … , a n ( 1 ≤ a i ≤ 10 9 ) a_1,a_2,…,a_n (1≤a_i≤10^9)a1,a2,,an(1ai109)表示每个节点的权值。
接下来m mm行,第i ii行输入两个整数u i u_iui​ 和v i ( 1 ≤ u i , v i ≤ n ) v_i (1≤u_i,v_i≤n)vi(1ui,vin)表示无向图上第i ii条边连接节点u i u_iui​ 和v i v_ivi,保证没有重边。

输出描述:

在一行上输出一个整数,表示最小需要消耗的代价。

示例1

输入:

5 3 1 2 3 4 5 1 2 2 3 1 3

输出:

9

说明:

先加上( 1 , 4 ) (1,4)(1,4)这条边,代价是4 44,然后加上( 1 , 5 ) (1,5)(1,5)这条边,代价是5 55,总代价是9 99

解题思路

本题核心是连通块统计+哈夫曼贪心算法求解最小加边代价。首先通过B F S BFSBFS遍历无向图,找到所有连通分量,并计算每个连通块内节点的最大权值。将问题转化为:合并k个连通块为1 11个,每次合并两个块的代价为两者最大值,求最小总代价。采用小根堆贪心策略,每次取出堆中两个最小的连通块最大值,合并代价为二者最大值并累加答案,再将合并后的最大值放回堆,重复操作直至堆中仅剩一个元素。该方法B F S BFSBFS线性遍历图,堆操作复杂度为对数级,完美适配n,m≤1e5的大数据规模。

总结

核心逻辑:统计所有连通块的最大值,利用哈夫曼贪心算法合并,最小化总代价。
关键操作:B F S BFSBFS查找连通块并计算块内最大值,小根堆贪心合并最小的两个值。
效率保障:线性处理图结构,堆操作高效,整体复杂度满足题目时间限制。

代码内容

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vt;typedefpair<ll,ll>pll;constll N=1e5+10;constll p=1e9+7;constll INF=1e18;constll M=2e3+10;ll a[N];vector<vector<ll>>g(N);boolvis[N];priority_queue<ll,vector<ll>,greater<ll>>pq;//大根堆voidbfs(ll x){ll mx=-1;queue<ll>q;q.push(x);while(!q.empty()){ll y=q.front();mx=max(mx,a[y]);q.pop();if(vis[y])continue;vis[y]=1;for(autou:g[y]){if(vis[u])continue;q.push(u);}}pq.push(mx);}intmain(){ll n,m;cin>>n>>m;for(ll i=1;i<=n;i++)cin>>a[i];for(ll i=1;i<=m;i++){ll u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}ll cnt=0;//连通块的个数for(ll i=1;i<=n;i++){if(!vis[i]){bfs(i);cnt++;}}ll ans=0;while(pq.size()>1){ll u=pq.top();pq.pop();ll v=pq.top();pq.pop();ans+=max(u,v);pq.push(max(u,v));}cout<<ans<<endl;return0;}
http://www.jsqmd.com/news/620216/

相关文章:

  • 终极指南:3分钟为Axure RP安装中文语言包,告别英文界面困扰
  • 2026 年在职雅思稳过机构权威榜单:上班族高效出分指南,监督为王、稳过无忧 - 速递信息
  • 如何在Windows上轻松安装APK文件:APK-Installer完整指南
  • 【研报299】2026电动汽车牵引电机技术创新机遇研究报告:AI与先进冷却的创新方向
  • 深入解析安卓USB升级包:如何高效提取关键镜像文件
  • 如何提高C编程能力
  • 靠谱的石油套管生产厂家 - 资讯焦点
  • 章二 直通心灵的窗口
  • 2026年佛山GEO优化公司哪家好?推荐评测口碑对比知名七家排名
  • DeepSeek教我如何诡辩
  • WEB-RTC vs H.323
  • ◇【技术解析】TD3算法:如何通过Clipped Double Q-learning解决Actor-Critic中的高估问题
  • 2026雅思机构权威榜单发布|财政紧缩下的教育投资,如何用市场经济眼光选对雅思机构? - 速递信息
  • XShell突然罢工?别慌!手把手教你用FinalShell快速接管服务器运维(附下载与基础配置)
  • 第X篇:COZE实战指南 【基于COZE工作流打造智能视频素材提取引擎】全流程解析
  • 甜味剂超细粉碎工艺与设备选型全攻略
  • PDE (Processing D Editor) 三维场景编辑器 · 软件白皮书 · 基于 v..执
  • 2026雅思机构权威实测榜|刚需备考选哪家? - 速递信息
  • 百度网盘直链解析:突破限速实现10倍下载加速的终极指南
  • 计算机毕业设计:Python全国天气爬虫可视化预测系统 Django框架 线性回归 数据分析 大数据 机器学习 大模型 气象数据(建议收藏)✅
  • 2026雅思备考指南!五大机构对比,多次元教育凭实力稳居榜首 - 速递信息
  • 山东鼎恩家庭教育骗人的还是真的?看完这5个方面你就明白了 - 资讯焦点
  • MetaGPT实战:5分钟搭建你的第一个AI开发团队(含角色配置与代码生成)
  • 前端小白必看:30天轻松掌握AI开发,收藏这文章让你薪资翻倍!
  • 从数据采集到回放验证:ADTF 适配 ROS 的 ADAS 测试实践愿
  • YApi本地部署后,接口测试插件cross-request装不上?手把手教你解决Chrome扩展加载难题
  • E57点云格式:从标准规范到工程实践的数据桥梁
  • 想要快速提分,如何选择雅思机构?2026雅思机构专业推荐榜单 - 速递信息
  • 如何用计算机视觉技术让原神效率提升300%:BetterGI智能辅助实战指南
  • 农业AI落地最后一公里:R语言轻量化产量预测模型部署指南(支持树莓派边缘推理,含Docker封装脚本)