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

最小生成树

最小生成树问题是指给定一个带权的无向图,删除一些边使得这个无向图变成一棵树,并且权值之和最小。

解决此类问题的方法主要有两种:Prim算法,Kruskal算法

Prim 算法

从一个点开始,逐步扩展,每次选择权值最小的相连的边,保证不出环,直到顶点总数等于图中所有顶点个数,组成最小生成树

例题 最小生成树

P3366 【模板】最小生成树

#include<bits/stdc++.h>
using namespace std;
int fa[500005],n,m,ans,cnt;
int vis[100005],dis[100005],g[5005][5005];
void prim(){memset(vis,0,sizeof vis);memset(dis,0x3f,sizeof dis);dis[1]=0;for(int i=1;i<=n;i++){int t=-1;for(int j=1;j<=n;j++){if(!vis[j]&&(t==-1||dis[j]<dis[t])){t=j;}}if(dis[t]==0x3f3f3f3f){printf("orz\n");return ;}vis[t]=1;ans+=dis[t];for(int j=1;j<=n;j++){if(dis[j]>g[t][j]&&!vis[j]){dis[j]=g[t][j];}}}printf("%d\n",ans);
}
int main(){scanf("%d%d",&n,&m);memset(g,0x3f,sizeof g);for(int i=1;i<=m;i++){ int xx,yy,zz;scanf("%d%d%d",&xx,&yy,&zz);if(g[xx][yy]==0x3f3f3f3f){g[xx][yy]=zz;g[yy][xx]=zz;}else{g[xx][yy]=min(zz,g[xx][yy]);g[yy][xx]=min(zz,g[yy][xx]);}}prim();return 0;
}

Kruskal 算法

把所有边都从小到大排好序,从小到大逐个放入树,保证不能出环,直至树中结点总个数等于原无向图顶点数

例题 最小生成树

P3366 【模板】最小生成树

#include<bits/stdc++.h>
using namespace std;
int fa[100005],n,m,ans,cnt;
struct node{int x,y,z;
}a[200005];
int Find(int x){if(fa[x]==x){return x;}return fa[x]=Find(fa[x]);
}
bool cmp(node aa,node bb){return aa.z<bb.z;
}
int kruskal(){sort(a+1,a+m+1,cmp);for(int i=1;i<=m;i++){int xx=Find(a[i].x);int yy=Find(a[i].y);if(xx==yy){continue;}ans+=a[i].z;fa[yy]=xx;if(++cnt==n-1){return ans;}}return -1;
}
void Init(){for(int i=1;i<=n;i++){fa[i]=i;}
}
int main(){scanf("%d%d",&n,&m);Init();for(int i=1;i<=m;i++){scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);}if(kruskal()==-1){printf("orz\n");return 0;}printf("%d\n",ans);return 0;
}

Build

给定几个城镇的坐标,要让它们联通起来,在它们间

#include<bits/stdc++.h>
using namespace std;
long long fa[500005],n,ans,cnt;
struct node2{long long x,y,z;
}b[500005];
struct node{long long x,y,z;
}a[500005];
long long Find(long long x){if(fa[x]==x){return x;}return fa[x]=Find(fa[x]);
}
bool cmp1(node2 aa,node2 bb){return aa.x<bb.x;
}
bool cmp2(node2 aa,node2 bb){return aa.y<bb.y;
}
bool cmp(node aa,node bb){return aa.z<bb.z;
}
void kruskal(){sort(a+1,a+2*n+1,cmp);for(int i=1;i<=2*n;i++){long long x=a[i].x;long long y=a[i].y;long long xx=Find(x);long long yy=Find(y);if(xx==yy){continue;}fa[xx]=yy;ans+=a[i].z;cnt++;if(cnt==n-1){return ;}}
}
void Init(){for(int i=1;i<=n;i++){fa[i]=i;}
}
int main(){scanf("%lld",&n);Init();for(int i=1;i<=n;i++){ scanf("%lld%lld",&b[i].x,&b[i].y);b[i].z=i;}sort(b+1,b+n+1,cmp1);for(int i=1;i<n;i++){a[i].x=b[i].z;a[i].y=b[i+1].z;a[i].z=b[i+1].x-b[i].x;}sort(b+1,b+n+1,cmp2);for(int i=1;i<n;i++){a[i+n].x=b[i].z;a[i+n].y=b[i+1].z;a[i+n].z=b[i+1].y-b[i].y;}kruskal();printf("%lld\n",ans);return 0;
}

相关文章:

最小生成树

最小生成树问题是指给定一个带权的无向图&#xff0c;删除一些边使得这个无向图变成一棵树&#xff0c;并且权值之和最小。 解决此类问题的方法主要有两种&#xff1a;Prim算法&#xff0c;Kruskal算法 Prim 算法 从一个点开始&#xff0c;逐步扩展&#xff0c;每次选择权值…...

二维动画制作软件 Animate 2024 for mac激活版

Animate 2024 for Mac是一款功能强大的二维动画制作软件&#xff0c;专为Mac用户打造。它提供了丰富的动画编辑功能&#xff0c;使用户能够轻松创建出生动逼真的动画作品。无论是短片、广告还是游戏等应用领域&#xff0c;Animate 2024都能发挥出出色的表现。 软件下载&#xf…...

相对论中关于光速不变理解的补充

近几个月在物理直播间聊爱因斯坦相对论&#xff0c;发现好多人在理解爱因斯坦相对论关于基本假设&#xff0c;普遍认为光速是不变的&#xff0c;质能方程 中光速的光速不变的&#xff0c;在这里我对这个假设需要做一个补充&#xff0c;他是基于质能方程将光速C 在真是光速变化曲…...

面试(04)————JavaWeb

1、网络通讯部分 1.1、 TCP 与 UDP 区别&#xff1f; 1.2、什么是 HTTP 协议&#xff1f; 1.3、TCP 的三次握手&#xff0c;为什么&#xff1f; 1.4、HTTP 中重定向和请求转发的区别&#xff1f; 1.5、 Get 和 Post 的区别&#xff1f; 2、cookie 和 session 的区别&am…...

Debian12 使用 nginx 与 php8.2 使用 Nextcloud

最近将小服务器升级了下系统&#xff0c;使用了 debian12 的版本&#xff0c;正好试试 nginx 和 php-fpm 这种方式运行 Nextcloud 这个私有云的配置。 一、基本系统及应用安装 系统&#xff1a;debian12 x86_64 位版本最小安装&#xff0c;安装后可根据自己需求安装一些工具&…...

Java设计模式:代理模式的静态和动态之分(八)

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在软件设计中&#xff0c;代理模式是一种常用的设计模式&#xff0c;它为我们提供了一种方式来控制对原始对象的访问。在Java中&a…...

【论文通读】AgentStudio: A Toolkit for Building General Virtual Agents

AgentStudio: A Toolkit for Building General Virtual Agents 前言AbstractMotivationFramework评估GUI GroudingReal-World Cross-Application Benchmark Suite Conclusion 前言 来自昆仑万维的一篇智能体环境数据大一统框架工作&#xff0c;对未来计算机智能体的发展具有指…...

wordvect嵌入和bert嵌入的区别

Word2Vec 嵌入和 BERT 嵌入之间有几个关键区别&#xff1a; 训练方式&#xff1a; Word2Vec&#xff1a;Word2Vec 是一个基于神经网络的词嵌入模型&#xff0c;它通过训练一个浅层的神经网络来学习单词的分布式表示。它有两种训练方式&#xff1a;连续词袋模型&#xff08;CBOW…...

渗透测试练习题解析 5(CTF web)

1、[安洵杯 2019]easy_serialize_php 1 考点&#xff1a;PHP 反序列化逃逸 变量覆盖 【代码审计】 通过 GET 的方式获取参数 f 的值&#xff0c;传递给变量 function 定义一个过滤函数&#xff0c;过滤掉特定字符&#xff08;用空字符替换&#xff09; 下面的代码其实没什么用…...

PCA(Principal Component Analysis,主成分分析)

PCA&#xff08;Principal Component Analysis&#xff0c;主成分分析&#xff09;是一种在数据分析中广泛应用的统计方法&#xff0c;主要用于数据降维、可视化和去噪。以下是对PCA的发展史、工作原理以及理论基础的详细解释&#xff1a; Principal Component Analysis 一、PC…...

干货 | 探索CUTTag:从样本到文库,实验步步为营!

CUT&Tag&#xff08;Cleavage Under Targets and Tagmentation&#xff09;是一种新型DNA-蛋白互作研究技术&#xff0c;主要用于研究转录因子或组蛋白修饰在全基因组上的结合或分布位点。相比于传统的ChIP-seq技术&#xff0c;CUT&Tag反应在细胞内进行&#xff0c;创新…...

提质不增本,降本不降质

#公益巡讲# #质量万里行# 公开课、沙龙活动...

数据结构---顺序表实现

目录 1.顺序表 2.动态顺序表的实现 &#xff08;4&#xff09;顺序表初始化 &#xff08;5&#xff09;顺序表销毁 &#xff08;6&#xff09;顺序表的插入 a.尾插 b.头插 &#xff08;7&#xff09;顺序表的删除 a.尾删 b.头删 &#xff08;8&#xff09;指定位置之…...

python docx 添加动态表格

在Python中&#xff0c;使用python-docx库可以创建Word文档并添加动态表格。以下是一个简单的例子&#xff0c;演示如何创建一个包含动态内容的表格&#xff1a; from docx import Document# 创建一个Word文档 document Document()# 添加一个标题 document.add_heading(动态表…...

git配置多SSH

目的&#xff1a; 一台电脑可以让github、gitee等账号同时存在&#xff0c;让不同账号配置不同的密钥 第一步&#xff1a;创建不同平台的SSH公钥 执行命令&#xff1a; ssh-keygen -t rsa -C "对应仓库邮箱地址" -f ~/.ssh/id_rsa.github 如果执行上面的命令&…...

IDEA连接SqlServer数据库

目录 下载jar包 下载sqljdbc_12.6压缩包 解压 导入IDEA 新建文件夹 复制粘贴进JDBC文件夹并设为library 编写类及方法 代码 下载jar包 以sqljdbc_12.6为例 下载sqljdbc_12.6压缩包 最新地址&#xff1a;sqljdbc 官方最新地址 解压 解压即用 导入IDEA 新建文件夹 复制…...

LeetCode 378 有序矩阵中第K小的元素

题目信息 LeetoCode地址: . - 力扣&#xff08;LeetCode&#xff09; 题解内容大量转载于&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目理解 题意很直观&#xff0c;就是求二维矩阵中所有元素排序后第k小的数。 最小堆写法 该写法不再赘述&#xff0c;维护…...

Vue3(domdiff)最长递归子序列求解简易版(超简单)

Vue3&#xff08;domdiff&#xff09;最长递归子序列求解简易版 ⚠️ 关键词&#xff08;每一个都需要理解&#xff09;js 代码实现写完感想欢迎关注 ⚠️ 关键词&#xff08;每一个都需要理解&#xff09; 动态规划&#xff08;O(N^2)&#xff09;&#xff08;不提倡&#xf…...

LLaMA-Factory+qwen多轮对话微调

LLaMA-Factory地址&#xff1a;https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md qwen地址&#xff1a;https://huggingface.co/Qwen/Qwen-7B-Chat/tree/main 数据准备 数据样例 [ {"id": "x3959", "conversations": [{&qu…...

邦芒面试:如何在面试中巧妙回答自己的缺点

在面试中&#xff0c;被问及自己的缺点时&#xff0c;如何巧妙回答是一门学问。恰当的回答不仅能够展示你的自我认知&#xff0c;还能让面试官看到你的成长潜力和积极态度。 首先&#xff0c;切忌谈一些看似缺点实则优点的话题&#xff0c;如追求完美、待人接物太客气等。这些…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...