news 2026/6/22 19:52:56

k算法最小生成树的最优化,例题PTA:毁灭

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
k算法最小生成树的最优化,例题PTA:毁灭

题目链接

校内链接:7-10 毁灭 - 测试模拟1,没有的依然可以看题目图片,在下面

题目

图解

parent数组进行set查找的路径压缩,cnt数组原理判断更少的set集合来更新新集合的parent

其他地方,排序依旧是堆排序,用优先队列,定义一个struct edge并重载 < 符号就好了

我们接下来只图解整个parent数组和cnt数组怎么使用

其实这里我们加一个判定,每回在对cnt进行操作的时候判断cnt的大小是否等于N就可以判断是否成功生成了最小生成树

这里我们例题是一个小变种我们要计算所有不在最小生成树的边的路径大小总和

代码

#include<iostream> #include<queue> using namespace std; const int N=2e5+5; int fa[N]; int cnt[N]; struct edge{ int u; int v; long long len; edge(int U=0,int V=0,int Len=0):u(U),v(V),len(Len){}; bool operator <(const edge& y)const{ return len>y.len; }; }; int findfa(int x) { if(fa[x]==x) return x; return findfa(fa[x]); } int main() { int n,m; long long sum;sum=0; priority_queue<edge>queue1; cin>>n>>m; for(int i=1;i<=n;i++) fa[i]=i,cnt[i]++; for(int i=0;i<m;i++) { int u,v,len; cin>>u>>v>>len; queue1.push(edge(u,v,len)); } while(!queue1.empty()) { edge ed=queue1.top(); queue1.pop(); int u=ed.u,v=ed.v,len=ed.len; int fau=findfa(u),fav=findfa(v); if(fau!=fav) { if(cnt[fav]>cnt[fau]) { fa[fau]=fa[fav]; cnt[fav]+=cnt[fau]; } else { fa[fav]=fa[fau]; cnt[fau]+=cnt[fav]; } } else if(len>0) sum+=len; } cout<<sum; }

结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 9:15:39

43、Linux 网络安全:防火墙与认证机制深度解析(上)

Linux 网络安全:防火墙与认证机制深度解析(上) 在当今数字化时代,网络安全至关重要。Linux 系统为我们提供了一系列强大的工具来保障网络安全,本文将深入探讨 Linux 中的防火墙配置以及认证机制的优化。 1. 服务启动与防火墙控制 像 dhcpd 这样的服务会在系统启动时自动…

作者头像 李华
网站建设 2026/6/22 13:12:13

44、一次性密码与安全外壳:保障系统安全登录的有效手段

一次性密码与安全外壳:保障系统安全登录的有效手段 一次性密码(One - Time Passwords) 在网络安全中,若密码在传输过程中被窃取,即便选择了优质密码并保护好密码文件,也无济于事。因为明文、可重复使用的密码在网络传输中并不安全。为解决这一问题,一次性密码应运而生…

作者头像 李华
网站建设 2026/6/23 14:22:33

PostgreSQL pgvector扩展:向量相似性搜索的终极实践指南

PostgreSQL pgvector扩展&#xff1a;向量相似性搜索的终极实践指南 【免费下载链接】pgvector Open-source vector similarity search for Postgres 项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector PostgreSQL pgvector扩展为数据库注入了强大的向量相似性…

作者头像 李华
网站建设 2026/6/21 4:11:50

50、Linux系统安装与磁盘分区全攻略

Linux系统安装与磁盘分区全攻略 1. 创建额外安装磁盘 在进行系统安装时,启动盘并非唯一可能需要的磁盘。虽然服务器安装通常不需要额外的安装磁盘,但某些系统可能会有此需求。例如,需要通过PCMCIA网络适配器或连接到PCMCIA SCSI控制器的CD - ROM驱动器来安装Linux的笔记本…

作者头像 李华
网站建设 2026/6/22 17:17:44

27、Linux 路由软件配置指南

Linux 路由软件配置指南 1. 路由相关基础信息 在网络配置中,64512 到 65534 是保留用于私人使用的范围。有两个 redistribute 子句用于定义将通告给 BGP 邻居的路由。 redistribute connected 会告知路由器通告其直接连接的所有网络的路由; redistribute ospf 则让路…

作者头像 李华
网站建设 2026/6/23 13:31:43

KISS FFT轻量级信号处理终极指南:从入门到精通

KISS FFT轻量级信号处理终极指南&#xff1a;从入门到精通 【免费下载链接】old-kissfft [DEPRECATED MIRROR] You want https://github.com/mborgerding/kissfft! 项目地址: https://gitcode.com/gh_mirrors/ol/old-kissfft 在当今信号处理领域&#xff0c;轻量级信号处…

作者头像 李华