P1340 兽径管理 题解|最小生成树
题目大意
洛谷中链接
推荐文章:并查集入门
原文
约翰农场的牛群希望能够在 N N N 个草地之间任意移动。草地的编号由 1 1 1 到 N N N。草地之间有树林隔开。牛群希望能够选择草地间的路径,使牛群能够从任一 片草地移动到任一片其它草地。 牛群可在路径上双向通行。
牛群并不能创造路径,但是他们会保有及利用已经发现的野兽所走出来的路径(以下简称兽径)。每星期他们会选择并管理一些或全部已知的兽径当作通路。
牛群每星期初会发现一条新的兽径。他们接着必须决定管理哪些兽径来组成该周牛群移动的通路,使得牛群得以从任一草地移动到任一草地。牛群只能使用当周有被管理的兽径做为通路。
牛群希望他们管理的兽径长度和为最小。牛群可以从所有他们知道的所有兽径中挑选出一些来管理。牛群可以挑选的兽径与它之前是否曾被管理无关。
兽径决不会是直线,因此连接两片草地之间的不同兽径长度可以不同。 此外虽然两条兽径或许会相交,但牛群非常的专注,除非交点是在草地内,否则不会在交点换到另外一条兽径上。
在每周开始的时候,牛群会描述他们新发现的兽径。如果可能的话,请找出可从任何一草地通达另一草地的一组需管理的兽径,使其兽径长度和最小。
题目简述
给定 N ( 1 ≤ N ≤ 200 ) N(1≤N≤200) N(1≤N≤200) 个节点, 1 ≤ W ≤ 6000 1≤W≤6000 1≤W≤6000 条边,第 i ( 1 ≤ i ≤ W ) i(1 \leq i \leq W) i(1≤i≤W) 条边包含三个数 x , y , w x,y,w x,y,w,分别表示连接的点和边权。每次输入一条边后输出当前最小生成树的边权和,若无解输出 -1
。
样例输入
4 6
1 2 10
1 3 8
3 2 3
1 4 3
1 3 6
2 1 2
样例输出
-1
-1
-1
14
12
8
思路
由于 N N N 较小,可考虑对于每一次输入跑一遍克鲁斯卡尔算法,复杂度 O ( W 2 l o g W ) O(W^2 log W) O(W2logW),不能接受。
观察题目,从 N N N 入手,考虑我们已经连上所有边形成最小生成树的情况,如下图:
此时加入一条 1 3 6
的边,我们对已经有的 N − 1 N-1 N−1 条边和输入的 1 1 1 条边共 N N N 条边跑克鲁斯卡尔算法(代码实现部分我用的优先队列,可以替换成 sort
,单次复杂度均为 O ( N l o g N ) O(NlogN) O(NlogN),可以接受),每次多出的一条边删掉,再将跑完的边压入优先队列,可实现单次查询复杂度为 O ( N l o g N ) O(NlogN) O(NlogN)。
重复以上操作即可。
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,w;
int head[205];
int find(int x) {return head[x] == x?x:head[x] = find(head[x]);
}
struct node{int x,y,w;friend bool operator <(node a,node b) {return a.w > b.w;}
}edge[205];
priority_queue<node>ed;
signed main() {scanf("%lld %lld",&n,&w);while(w--) {node new_ed;scanf("%lld %lld %lld",&new_ed.x,&new_ed.y,&new_ed.w);ed.push(new_ed);for(int i = 1;i <= n;i++) head[i] = i;int cnt = 0,ans = 0;while(!ed.empty()) {new_ed = ed.top(),ed.pop();if(find(new_ed.x) != find(new_ed.y)) {head[find(new_ed.y)] = find(new_ed.x);cnt++;edge[cnt] = new_ed;ans += new_ed.w;}if(cnt == n - 1) break;}if(cnt < n - 1) printf("-1\n");else printf("%lld\n",ans);while(!ed.empty()) ed.pop();for(int i = 1;i <= cnt;i++) ed.push(edge[i]);}return 0;
}
相关文章:

P1340 兽径管理 题解|最小生成树
题目大意 洛谷中链接 推荐文章:并查集入门 原文 约翰农场的牛群希望能够在 N N N 个草地之间任意移动。草地的编号由 1 1 1 到 N N N。草地之间有树林隔开。牛群希望能够选择草地间的路径,使牛群能够从任一 片草地移动到任一片其它草地。 牛群可在…...
Python,Maskrcnn训练,cannot import name ‘saving‘ from ‘keras.engine‘ ,等问题集合
Python版本3.9,tensorflow2.11.0,keras2.11.0 问题一、module keras.engine has no attribute Layer Traceback (most recent call last):File "C:\Users\Administrator\Desktop\20240801\代码\test.py", line 16, in <module>from mrc…...

Linux常用工具
文章目录 tar打包命令详解unzip命令:解压zip文件vim操作详解netstat详解df命令详解ps命令详解find命令详解 tar打包命令详解 tar命令做打包操作 当 tar 命令用于打包操作时,该命令的基本格式为: tar [选项] 源文件或目录此命令常用的选项及…...
AI未来的发展如何
AI(人工智能)的发展前景非常广阔,随着技术的不断进步和应用场景的不断拓展,AI将在多个领域发挥重要作用。以下是对AI发展前景的详细分析: 一、技术突破与创新 生成式AI的兴起:以ChatGPT为代表的生成式AI技…...

若依替换首页上的logo
...
sed的使用示例
场景:使用sed将多个空格变成单空格,再使用cut来切分得到需要的结果 得到后面这个文件名: ls ./ drwxr-x— 2 root root 6 Jul 18 9:00 7b40f1412d83c1524af7977593607f15 drwxr-x— 2 root root 6 Jul 18 14:00 50af29cef2c65a9d28905a3ce831bcb7 drwxr-x— 2 root root 6 Jul…...
学历不是障碍:大专生如何成功进入软件测试行业
摘要: 在当今技术驱动的职场环境中,软件测试已成为一个关键的职业领域。尽管许多人认为高学历是进入这一行业的先决条件,但实际上,大专学历的学生同样有机会在软件测试领域取得成功。本文将探讨大专生如何通过技能提升、实践经验和…...

文件解析漏洞—IIS解析漏洞—IIS6.X
目录 方式 1:目录解析 方式 2:畸形文件解析 方式 3:PUT 上传漏洞(123.asp;.jpg 解析成 asp) 环境:Windows server 2003 添加 IIS 管理工具——打开 IIS——添加网站 创建完成之后,右击创建的…...
Sqlmap中文使用手册 - Brute force模块参数使用
目录 1. Brute force模块的帮助文档2. 各个参数的介绍2.1 --common-tables2.2 --common-columns2.3 --common-files 1. Brute force模块的帮助文档 Brute force:These options can be used to run brute force checks--common-tables Check existence of common tables--c…...
ubuntu20.04 开源鸿蒙源码编译配置
替换华为源 sudo sed -i "shttp://.*archive.ubuntu.comhttp://repo.huaweicloud.comg" /etc/apt/sources.list && sudo sed -i "shttp://.*security.ubuntu.comhttp://repo.huaweicloud.comg" /etc/apt/sources.list 安装依赖工具 如果是ubun…...

程序员面试 “八股文”在实际工作中是助力、阻力还是空谈?
“八股文”在实际工作中是助力、阻力还是空谈? 作为现在各类大中小企业面试程序员时的必问内容,“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢?有IT人士不禁发出疑问:程序员面试考…...
广告从用户点击开始到最终扣费的过程
用户点击广告 用户在网页或移动应用上看到广告,并点击广告。这一事件触发了整个广告处理流程。 广告请求触发 用户点击广告后,客户端(如浏览器、APP)向广告系统发送广告点击请求。请求通常包含以下信息: 用户ID 设备信…...
Linux系统编程-信号进程间通信
目录 异步(Asynchronous) 信号 数据结构 1.kill 2.alarm 3.pause 4.setitimer 5.abort 信号集(sigset_t类型) 1.sigemptyset 2.sigfillset 3.sigaddset 4.sigdelset 5.sigismember 信号屏蔽 1.sigprocmask 2.sigpending 3.sigsus…...
Attention Module (SAM)是什么?
SAM(Spatial Attention Module,空间注意力模块)是一种在神经网络中应用的注意力机制,特别是在处理图像数据时,它能够帮助模型更好地关注输入数据中不同空间位置的重要性。以下是关于SAM的详细解释: 1. 基本…...

【C语言】堆排序
堆排序即利用堆的思想来进行排序,总共分为两个步骤: 1. 建堆 升序:建大堆 降序:建小堆 原因分析: 若升序建小堆时间复杂度是O(N^2) 升序建大堆,时间复杂度O(N*logN) 所以升序建大堆…...

ntp服务重启报错Failed to restart ntpd.service: Unit is masked.
问题概述: 重启ntp服务报错Failed to restart ntpd.service: Unit is masked,使用systemctl unmask ntpd.service命令关闭屏蔽还是报错Failed to restart ntpd.service: Unit is masked 解决方法: 重装ntp服务 yum remove ntpyum install…...
面试题-每日5到
16.Files的常用方法都有哪些? Files.exists():检测文件路径是否存在 Files.createFile():创建文件 Files.createDirectory():创建文件夹 Files.delete():删除一个文件或目录 Files.copy():复制文件 Files.move():移动文件 Files.size():查看文件个数 Files.read():读…...
代码美学大师:打造Perl中的个性化代码格式化工具
代码美学大师:打造Perl中的个性化代码格式化工具 在软件开发过程中,代码的可读性至关重要。Perl,作为一种灵活的脚本语言,允许开发者以多种方式实现代码格式化。自定义代码格式化工具不仅能提升代码质量,还能加强团队…...

成为一名月薪 2 万的 web 安全工程师需要掌握哪些技能?
现在 web 安全工程师比较火,岗位比较稀缺,现在除了一些大公司对学历要求严格,其余公司看中的大部分是能力。 有个亲戚的儿子已经工作 2 年了……当初也是因为其他的行业要求比较高,所以才选择的 web 安全方向。 资料免费分享给你…...

Linux中如何添加磁盘分区
在Linux中添加分区通常涉及到几个步骤,包括识别磁盘、创建分区、格式化分区,以及挂载或将其用作特定的文件系统类型(如LVM、RAID等)。以下是一个基本的步骤指南,假设你正在使用命令行界面(CLI)和…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...

算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

【Vue】scoped+组件通信+props校验
【scoped作用及原理】 【作用】 默认写在组件中style的样式会全局生效, 因此很容易造成多个组件之间的样式冲突问题 故而可以给组件加上scoped 属性, 令样式只作用于当前组件的标签 作用:防止不同vue组件样式污染 【原理】 给组件加上scoped 属性后…...

[KCTF]CORE CrackMe v2.0
这个Reverse比较古老,已经有20多年了,但难度确实不小。 先查壳 upx压缩壳,0.72,废弃版本,工具无法解压。 反正不用IDA进行调试,直接x32dbg中,dump内存,保存后拖入IDA。 这里说一下…...