最小生成树模型
文章目录
- 题单
- 最小生成树模型
- 1.[最短网络(prim)](https://www.acwing.com/problem/content/1142/)
- 2. [局域网(kruskul)](https://www.acwing.com/problem/content/1143/)
- 3. [繁忙的都市](https://www.acwing.com/problem/content/1144/)
- 4. [ 联络员 ](https://www.acwing.com/problem/content/1145/)
- 5. [连接格点 ](https://www.acwing.com/problem/content/1146/)
题单
最小生成树模型
1.最短网络(prim)
纯裸的一道prim模版题
和dijkstra区别:d数组记录的是一个点到生成树的最小距离
#include<bits/stdc++.h>using namespace std;
int n;
const int N=110,INF=0x3f3f3f3f;
int g[N][N],st[N],d[N];
int res;void prim(){memset(d,0x3f,sizeof d);d[1]=0;for(int i=1;i<=n;i++){int t=-1;for(int j=1;j<=n;j++){if(!st[j]&&(t==-1||d[t]>d[j])){t=j;}}res+=d[t];st[t]=1;for(int j=1;j<=n;j++) d[j]=min(d[j],g[t][j]);}
}signed main(){cin>>n;memset(g,0x3f,sizeof g);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>g[i][j];}}prim();cout<<res<<endl;return 0;
}
2. 局域网(kruskul)
纯裸的kruskul算法
#include<bits/stdc++.h>using namespace std;
int n,k;
const int N=110,M=210;
int fa[N];int find(int x){if(x!=fa[x]) return x=find(fa[x]);return fa[x];
}struct edges{int x,y,z;bool operator<(const edges& M)const{return z<M.z;}
}es[N];signed main(){cin>>n>>k;for(int i=1;i<=n;i++) fa[i]=i;for(int i=0;i<k;i++){int x,y,z;cin>>x>>y>>z;es[i]={x,y,z};}sort(es,es+k);int res=0;for(int i=0;i<k;i++){int a=find(es[i].x),b=find(es[i].y),c=es[i].z;if(a!=b){fa[a]=b;}else{res+=c;}}cout<<res<<endl;return 0;
}
3. 繁忙的都市
思考:
- 题目大意就是要一个最长边最小的最小生成树
- 根据kruskull本身就需要给边排序的特性,直接按序取直到形成一颗生成树
- 这里的最小生成树和传统的权值之和最小的生成树不一样
#include<bits/stdc++.h>using namespace std;
int n,m;
const int N=310,M=8e3+10;
int fa[N];struct edge{int x,y,z;bool operator< (const edge& M)const{return z<M.z;}
}edges[M];int find(int x){if(x!=fa[x]) x=find(fa[x]);return fa[x];
}signed main(){cin>>n>>m;for(int i=1;i<=n;i++) fa[i]=i;for(int i=0;i<m;i++){int x,y,z;cin>>x>>y>>z;edges[i]={x,y,z};}sort(edges,edges+m);int res;for(int i=0;i<m;i++){int a=find(edges[i].x),b=find(edges[i].y),c=edges[i].z;if(a!=b){fa[a]=b;res=c;}}cout<<n-1<<' '<<res<<endl;return 0;
}
4. 联络员
第一眼:
- 根据线路分类:可以选择的路 以及 必须存在的路
- 也就是已知某些边的存在,找到剩下的边,使生成树权值最小(其实不确定还是不是求一颗生成树,但一定要满足每个点都能到,且选择的权值最小
- 那就直接kruskal算法
//一遍ac
#include<bits/stdc++.h>using namespace std;
const int N=2e3+10,M=1e4+10;
int fa[N];
int n,m;struct edge{int p,x,y,z;bool operator<(const edge& M)const{if(p==M.p){return z<M.z;}return p>M.p;}
}edges[M];int find(int x){if(x!=fa[x]) return x=find(fa[x]);return fa[x];
}signed main(){cin>>n>>m;for(int i=1;i<=n;i++) fa[i]=i;int res=0;for(int i=0;i<m;i++){int p,x,y,z;cin>>p>>x>>y>>z;if(p==1){int a=find(x),b=find(y);fa[a]=b;res+=z;}edges[i]={p,x,y,z};}sort(edges,edges+m);for(int i=0;i<m;i++){int a=find(edges[i].x),b=find(edges[i].y),c=edges[i].z;if(a!=b){fa[a]=b;res+=c;}}cout<<res<<endl;return 0;
}
5. 连接格点
还是在已有连线的基础上找到权值之和最小生成树
处理点阵
- (1)把二维压成一维
- (2) 离散化
//第一版代码tle了#include<bits/stdc++.h>using namespace std;
int n,m;
const int N=1e3+10;
int fa[N*N],g[N][N];
int cnt=0;struct edge{int x,y,z;bool operator<(const edge& M)const{return z<M.z;}}edges[2*N*N];int find(int x){if(x!=fa[x]) x=find(fa[x]);return fa[x];
}signed main(){cin>>n>>m;for(int i=1;i<=n*m;i++) fa[i]=i;int x,y,xx,yy;int t=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){g[i][j]=++t;if(i+1<=n){edges[cnt++]={t,t+m,1};}if(j+1<=m)edges[cnt++]={t,t+1,2};}}while(cin>>x>>y>>xx>>yy){int a=find(g[x][y]),b=find(g[xx][yy]);if(a!=b){fa[a]=b;}}sort(edges,edges+cnt);int res=0;for(int i=0;i<cnt;i++){int a=find(edges[i].x),b=find(edges[i].y),c=edges[i].z;if(a!=b){fa[a]=b;res+=c;}}cout<<res<<endl;return 0;
}
边权为正才有最小生成树
小tips:
- 先建纵向边再建横向边,可以省去一步排序过程。
#include<bits/stdc++.h>using namespace std;
int n,m;
const int N=1e3+10;
int fa[N*N],g[N][N];
int cnt;struct edge{int x,y,z;}edges[2*N*N];int find(int x){if(x!=fa[x]) fa[x]=find(fa[x]);//这一步是路径压缩return fa[x];
}void get_edges(){int dx[]={-1,0,1,0},dy[]={0,1,0,-1},dw[]={1,2,1,2};for(int z=0;z<2;z++){for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){for(int u=0;u<4;u++){if(u%2==z){int x=i+dx[u],y=j+dy[u],w=dw[u];if(x&&x<=n&&y&&y<=m){int a=g[i][j],b=g[x][y];if(a<b) edges[cnt++]={a,b,w};}}}}}}
}signed main(){cin>>n>>m;for(int i=1;i<=n*m;i++) fa[i]=i;int x,y,xx,yy;int t=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){g[i][j]=++t;}}while(cin>>x>>y>>xx>>yy){int a=find(g[x][y]),b=find(g[xx][yy]);//if(a!=b){// fa[a]=b;//}fa[a]=b;}get_edges();int res=0;for(int i=0;i<cnt;i++){int a=find(edges[i].x),b=find(edges[i].y),c=edges[i].z;if(a!=b){fa[a]=b;res+=c;}}cout<<res<<endl;return 0;
}
相关文章:
最小生成树模型
文章目录 题单最小生成树模型1.[最短网络(prim)](https://www.acwing.com/problem/content/1142/)2. [局域网(kruskul)](https://www.acwing.com/problem/content/1143/)3. [繁忙的都市](https://www.acwing.com/problem/content/1144/)4. [ 联络员 ](https://www.acwing.com/p…...
基于盲信号处理的声音分离-基于改进的信息最大化的ICA算法
基于信息最大化的ICA算法的主要依据是使输入端与输出端的互信息达到最大,且输出各个分量之间的相关性最小化,即输出各个分量之间互信息量最小化,其算法的系统框图如图所示。 基于信息最大化的ICA算法的主要依据是使输入端与输出端的互信息达到…...
如何在Qt Designer中管理QSplitter
问题描述 当按下按钮时,我希望弹出一个对话框,用户可以在其中选择内容并最终按下 ‘Ok’ 按钮。我想在这个对话框中放置一个 QSplitter,左侧面板将显示树状结构,右侧将显示其他内容。如何正确实现这一点? 从 Qt 的示…...
关于新零售的一些思考
本文作为2024上半年大量输入之后的核心思考之一。工作到一定阶段之后,思考的重要性越来越高,后续会把自己的个人思考记录在这个新系列《施展爱思考》。背景是上半年面临业务转型从电商到新零售,本文是相关大量输入之后的思考,对新…...
C++初学者指南-2.输入和输出---从输入流错误中恢复
C初学者指南-2.输入和输出—从输入流错误中恢复 文章目录 C初学者指南-2.输入和输出---从输入流错误中恢复怎么了?解决方案:出错后重置输入流 怎么了? 示例:连续输入 int main () {cout << "i? ";int i 0;cin…...
毫秒级响应!清科优能应用 TDengine 建设虚拟电厂运营管理平台
小T导读:在清科优能的虚拟电厂运营管理平台建设中,项目初期预计涉及约一万台设备、总数据采集量达数十万,在数据库选择上,其希望能支持至少两千台设备的并发数据处理。本文介绍了清科优能的数据库选型经验以及最终应用效果&#x…...
【Ubuntu noble】apt 无法安装软件 Unable to locate package vim
宿主机以及 docker 无法定位软件包 将 /etc/apt/sources.list.d/ubuntu.sources 修改为以下内容(主要是 Suites 字段增加了noble noble-updates) Types: deb URIs: http://archive.ubuntu.com/ubuntu/ Suites: noble noble-updates noble-backports Com…...
Instagram APIj接口——快速获取Ins帖子媒体内容下载链接
一、引言 在社交媒体蓬勃发展的今天,Instagram已成为用户分享照片、视频和精彩瞬间的首选平台。然而,对于很多用户来说,想要保存或分享Instagram上的精彩内容却常常遇到困扰。为了解决这个问题,我们精心打造了一款全新的Instagra…...
Java基础(四)——字符串、StringBuffer、StringBuilder、StringJoiner
个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 …...
吐血推荐!3款视频生成工具,全部国产,都免费
AI视频大模型的爆发,让创作爆款视频不再是专业人士的能力。 今天二师兄给大家推荐3款免费的视频生成工具。 01 可灵 推荐指数 : 五颗星 先看效果 可灵大模型测试 可灵大模型是快手AI团队自主研发的视频生成大模型,具备强大的视频创作能力&a…...
【Web3】Web3.js 启动!并解决Web3 is not a constructor报错
苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 本节教大家如何启动Web3.js 目录 Web3 启动! 于是很愉快的报错 创建实例! 出来了 Web3:模块…...
算法训练营第六十七天 | 卡码网110 字符串接龙、卡码网105 有向图的完全可达性、卡码网106 岛屿的周长
卡码网110 字符串接龙 这题一开始用的邻接表dfs,不幸超时 #include <iostream> #include <list> #include <string> #include <vector> using namespace std;int minLen 501;bool count(string a, string b) {int num 0;for (int i 0; …...
搭建 MySQL MHA
搭建 MySQL MHA 搭建 MySQL MHA实验拓扑图实验环境实验思路MHA架构故障模拟 实验部署数据库安装主从复制部署时间同步主服务器配置从服务器配置创建链接 MHA搭建安装依赖的环境安装 node 组件安装 manager 组件配置无密码认证在 manager 节点上配置 MHA管理 mysql 节点服务器创…...
python中的线程与进程
一、线程与进程 在计算机科学中,理解线程和进程的区别是重要的基础知识。这些概念对于多任务操作和并发编程尤为关键。下面将详细介绍线程与进程的区别、特点和各自的使用场景。 1.1 进程(Process) 进程是操作系统分配资源的基本单位。每个进…...
网络安全筑基篇——反序列化漏洞
目录 序列化是什么? 反序列化又是什么? 反序列化漏洞的危害 代码样例 常见的魔术方法 修复方式有哪些? 常见的反序列化漏洞 Shiro反序列化漏洞 Fastjson反序列化漏洞 序列化是什么? 将实例化对象转换成字节流的过程 反序…...
帝国cms定时审核并更新的方法
比如你网站采集了成千上万篇文章,不可能一下子全部放出来的,所以为了模拟人工发布,那么就需要定时审核发布文章内容,本文内容核心解决了更加个性化的逼真模拟人工更新网站内容。 第一:首先要满足你的表中有未审核的数据…...
一个简单好用安全的开源交互审计系统,支持SSH,Telnet,Kubernetes协议
前言 在当今的企业网络环境中,远程访问和交互审计成为了保障网络安-全的重要组成部分。然而,现有的解-决方案往往存在一些痛点,如复杂的配置、有限的协议支持、以及审计功能的不足。这些问题不仅增加了IT管理员的负担,也为企业的…...
使用Spring Boot和WebSocket实现实时通信
使用Spring Boot和WebSocket实现实时通信 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot应用中使用WebSocket实现实时通信&am…...
【Vue】集成富文本编辑器
这文章使用的是wangeditor插件,官网地址:wangEditor,这个比较简单 安装 npm i wangeditor --save 使用 <div id"editor"></div>import E from "wangeditor"const editor new E("#editor") e…...
【论文阅读】--Popup-Plots: Warping Temporal Data Visualization
弹出图:扭曲时态数据可视化 摘要1 引言2 相关工作3 弹出图3.1 椭球模型3.1.1 水平轨迹3.1.2 垂直轨迹3.1.3 组合轨迹 3.2 视觉映射与交互 4 实施5 结果6 评估7 讨论8 结论和未来工作致谢参考文献 期刊: IEEE Trans. Vis. Comput. Graph.(发表日期: 2019&…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
