C++下Kruskal卡空间黑科技

news/2024/11/14 14:58:41/文章来源:https://www.cnblogs.com/chenruikang/p/18545968

众所周知,一旦建出的最小生成树需要遍历,Kruskal就需要大量只在某一阶段生效的存图空间,即kruskal排序+贪心时所用空间和链式前向星存树所用空间(其他存树方式后者只会更大)。
图的边数和树的边数*2的最大值,是我们理论上所需要的最小空间(因为需要同时存储),另一部分空间则成为了理论上可以优化的空间,虽然这部分多用的空间并不大,但是我们可以优化掉
一种能降低kruskal后续空间的方法是我们可以临时开空间储存,实现贪心+排序后这部分空间的释放,但是并没有改变我们峰值时需要开额外,依然有优化空间。
我们考虑数组越界但是成功访问的原理:空间按照声明的顺序顺次开启,当我们访问一个越界的下标时,如果这个下标所对应的空间已经被其他数组开到了,那么此时不会RE,而是访问到所对应的空间。
那么,我们不妨只给第一部分node1个空间,随后开edge数组的大小开成max{图的边数,树的边数*2}的空间,从node的2位置开始读入,即edge的1位置,让对node无意义的空间立马被edge复用。
此时node每向后遍历一个边,edge最多拓展两个,显然可能使node未遍历任然有意义的边被覆盖,那么我们给node开额外三个无意义的变量a,b,c,就能使得有意义的node始终不会被覆盖。
后续优化:依旧需要开6个int大小的额外空间,理论上可以优化,但是意义不大。
贺的时候注意:
将edge数组的大小开成max{图的边数,树的边数*2}。
部分版本较老的C++编译器,或者部分编译指令可能会使得这个技巧爆RE

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
const int MAXN =305;
const int MAXM =1e5+5;
struct Node{int fm,to,val,a,b,c;
}node[1];
struct Edge{int nx,to,val;
}edge[2*MAXM];
int head[MAXN],cnt;
int n,m;
void add(int fm,int to,int val){edge[++cnt].nx=head[fm];edge[cnt].to=to;edge[cnt].val=val;head[fm]=cnt;
}
int f[MAXN];
int mx;bool cmp(Node a,Node b){return a.val<b.val;
}
int find(int x){return f[x]=f[x]==x?x:find(f[x]);
}void merge(int x,int y){x=find(x),y=find(y);if(x!=y){f[x]=y;}
}void Kruskal(){for(int i=1;i<=n;i++)f[i]=i;sort(node+2,node+m+2,cmp);for(int i=2;i<=m+1;i++){//cout<<node[i].fm<<' '<<node[i].to<<' '<<node[i].val<<endl;int x=node[i].fm,y=node[i].to;int tx=find(x),ty=find(y);if(tx!=ty){mx=node[i].val;merge(tx,ty);add(x,y,mx);add(y,x,mx);}}
}int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n>>m;int u,v,w;for(int i=2;i<=m+1;i++){cin>>u>>v>>w;node[i]={u,v,w,0,0,0};}Kruskal();cout<<mx<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833432.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA如何创建web项目及tomcat设置等

一、Java EE插件启用 1.在启动IDEA时,点击右下角并进入Plugins设置2.选择Java EE相关插件,点击OK然后重启二、创建Web项目 1.点击File->New Project,点击Java Enterprise,勾选web Application。确保已选择正确的jdk2.输入项目名称和存放路径,点击Finish完成三、设置tomca…

.net core生成二维码

安装Net.Codecrete.QrCodeGenerator dotnet add Net.Codecrete.QrCodeGenerator var qr = QrCode.EncodeText("https://baidu.com", QrCode.Ecc.Medium); var bytes = qr.ToBmpBitmap(0, 5, 0, 16777215);//5表示单个像素大小,可按需调整,0表示背景色白色,1677721…

Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解

title: Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解 date: 2024/11/14 updated: 2024/11/14 author: cmdragon excerpt: schema:beforeWrite 钩子是 Vite 提供的一个功能强大的生命周期钩子,允许开发者在 JSON Schema 被写入之前执行自定义操作。利用这个钩子,您可以…

最新项目管理软件趋势,2024年全面盘点11款工具!

2024年,项目管理软件领域继续朝着更加智能化、协同化和自动化的方向发展,满足不同规模企业的需求。随着企业对灵活性、透明度和效率的要求不断提高,项目管理软件在功能和使用方式上持续创新。以下是2024年项目管理软件的最新趋势,并涵盖了国内外多款主流项目管理工具。 1. …

PMP百科网精选:项目管理软件怎么选?这里有答案!

在选择项目管理软件时,企业和项目经理需要综合考虑多个因素,以确保所选的软件能够有效支持项目的各个阶段并满足团队的具体需求。PMP百科网的精选内容通常会根据项目管理的实际需求来推荐适合的软件。以下是选择项目管理软件时应该考虑的几个关键因素: 1. 项目的规模和复杂性…

设备管理系统功能拆解——设备巡检管理

工厂生产过程中,设备的稳定性和可靠性非常重要,设备巡检管理则是确保设备正常运行的关键环节。如果生产线上某台设备在没有任何预兆的情况下出现故障,可能会导致整条生产线停滞,影响后续的交付与客户满意度。 而设备巡检管理则是通过定期和系统性的检查,确保设备在运行过程…

DisplayPort的TYPE-C信号定义和配置功能描述

DisplayPort的备用模式重新配置TYPE-C连接器上的某些引脚以支持其他协议.例如DisplayPort备用模式的USB-C型连接器引脚分配。 VESA规范中列出了不同的解决方案,这些解决方案通过特定的连接器插脚和电线支持USB Type-C上的DP。 24引脚的USB Type-C连接器可以分为七个功能类型:…

OSS对象存储服务器(存储桶)

因公司业务的需要,需要做大批量数据存储,因而分布式存储提上日程,研究了很久发现,使用第三方或云存储确实是一个不错的选择,以下是我介绍的一个比较好用的存储桶,支持私有化部署。 1.首先,此存储软件为:MinIo,如果商用,请注意版权问题。 2.在Windows的环境下,请尽量使…

SBT40100VFCT-ASEMI低压降肖特基SBT40100VFCT

SBT40100VFCT-ASEMI低压降肖特基SBT40100VFCT编辑:ll SBT40100VFCT-ASEMI低压降肖特基SBT40100VFCT 型号:SBT40100VFCT 品牌:ASEMI 封装:TO-220F 特性:插件二极管 正向电流:40A 反向耐压:100V 恢复时间:35ns 引脚数量:3 芯片个数:2 芯片尺寸:MIL 浪涌电流:300A 漏电…

jenkins控制台不输出shell详细信息---已解决

命令执行是成功的,但是控制台没有输出ls -l 详细的内容,如下:解决:打开SSH Server下面的高级选项----勾选Verbose output in console

LeetCode刷题笔记9.9-9.15

LeetCode刷题笔记9.9-9.15 二叉树 主要学两种遍历方式:层序遍历、递归遍历 1)层序遍历BFS 基本思想:逐层遍历元素,可以借助队列,先进先出,队首出元素的同时进该元素的左右节点(这也是最简单的实现方式)队列Q:1 -> 出1 进2,3(2,3)-> 出2 进4(3,4)-> 出3 …

PMP考试通过率提升,项目管理软件的作用不可小觑!

PMP(Project Management Professional)考试的通过率提升,不仅仅依赖于考生的个人努力和知识积累,项目管理软件的有效运用也起到了重要的辅助作用。 在现代项目管理的环境中,尤其是PMP考试的备考过程中,项目管理软件的使用能够帮助考生更好地理解和应用项目管理的概念和工…