最短路径树,CF 1076D - Edge Deletion

news2024/9/22 11:25:22

目录

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

1076D - Edge Deletion


二、解题报告

1、思路分析

考虑dijkstra实际上是利用贪心算法求了一棵最短路径树,详见:最短路合集,Dijkstra,堆优化Dijkstra,BellmanFord,SPFA,Floyd,附完整代码及OJ链接-CSDN博客

最短路径树中有n - 1条边,如果k > n - 1,那么我们保留n - 1条树边即可

否则,保留离源点最近的k个结点的前驱边

2、复杂度

时间复杂度: O(MlogM + nlogn)空间复杂度:O(N + M)

3、代码详解

 ​
#include <bits/stdc++.h>
#include <ranges>

using i64 = long long;
using i32 = unsigned int;
using u64 = unsigned long long;
using i128 = __int128;

constexpr int inf32 = 1E9 + 7;
constexpr i64 inf64 = 1E18 + 7;
constexpr int P = 1'000'000'007;

void solve() {
	int n, m, k;
	std::cin >> n >> m >> k;

	std::vector<std::vector<int>> g(n);
	std::vector<std::array<int, 2>> edges;
	
	for (int i = 0, u, v, w; i < m; ++ i) {
		std::cin >> u >> v >> w;
		-- u, -- v;
		g[u].push_back(edges.size());
		edges.push_back({v, w});
		g[v].push_back(edges.size());
		edges.push_back({u, w});	
	}

	std::vector<i64> dst(n, inf64);
	std::vector<int> pre(n, -1);

	std::priority_queue<std::pair<i64, int>, std::vector<std::pair<i64, int>>, std::greater<std::pair<i64, int>>> pq;

	pq.emplace(dst[0] = 0, 0);

	while (pq.size()) {
		auto [d, u] = pq.top();
		pq.pop();

		if (d > dst[u]) continue;

		for (int i : g[u]) {
			auto [v, w] = edges[i];
			if (d + w < dst[v]) {
				pre[v] = i;
				pq.emplace(dst[v] = d + w, v);
			}
		}
	}

	int ans = std::min(k, n - 1);

	std::cout << ans << '\n';

	std::vector<int> st(n - 1);
	std::iota(st.begin(), st.end(), 1);

	std::ranges::sort(st, [&dst](int u, int v) -> bool{
		return dst[u] < dst[v];
	});

	for (int i = 0; i < ans; ++ i) {
		std::cout << pre[st[i]] / 2 + 1 << " \n"[i + 1 == ans];
	}
}

auto FIO = []{
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	std::cout.tie(nullptr);
	return 0;
}();

int main () {
	#ifdef DEBUG
		freopen("in.txt", "r", stdin);
		freopen("out.txt", "w", stdout);
	#endif
	
	int T = 1;
	// std::cin >> T;
	while (T --)
		solve();

	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何将MySQL迁移到TiDB,完成无缝业务切换?

当 MySQL 数据库的单表数据量达到了亿级&#xff0c;会发生什么&#xff1f; 这个现象表示公司的业务上了一个台阶&#xff0c;随着数据量的增加&#xff0c;公司规模也进一步扩大了&#xff0c;是非常喜人的一个改变 &#xff0c;然而随之而来的其他变化&#xff0c;就没那么…

【踩坑】如何解锁微软“已暂时锁定你的帐户”

登录微软账号时候&#xff0c;提示&#xff1a;有人在使用此帐户时输入错误密码的次数过多。为了保证帐户安全&#xff0c;我们已暂时锁定你的帐户&#xff0c;请稍后再试。 进入以下网站重置密码即可&#xff1a; https://account.live.com/ResetPassword.aspx?mktzh-CN 登录…

什么是企业高性能web服务器,这一篇就够了

一.Web 服务基础介绍 正常情况下的单次web服务访问流程&#xff1a; 1.1 互联网发展历程回顾 1993年3月2日&#xff0c;中国科学院高能物理研究所租用AT&T公司的国际卫星信道建立的接入美国SLAC国家实 验室的64K专线正式开通&#xff0c;成为我国连入Internet的第一根专…

IMU用于受伤颈椎的角度监测

最近&#xff0c;一项由泰国科研团队开展的研究&#xff0c;创新性地应用了惯性测量单元&#xff08;IMU&#xff09;传感器&#xff0c;以评估和比较两种不同的颈椎固定技术——传统脊柱固定&#xff08;TSI&#xff09;和脊柱运动限制&#xff08;SMR&#xff09;——在院前急…

MacBook M系列芯片基于docker安装Oracle 19c

网上找到的镜像&#xff0c;如&#xff1a;doctorkirk/oracle-19c、registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c&#xff0c;都是linux/amd64版本&#xff0c;M系列芯片一般也是支持linux/amd64的镜像运行的&#xff0c;但是oracle的这两个镜像运行不起来&#xff…

Python入门级 [ 继上篇 进阶版 持续更新中哞哞哞!!! ]例题较多

本文主要结合例题介绍了数据集合中的元组、字符串、以及字符串的查找 替换 格式化等基础函数。下期是序列 集合 字典&#xff0c;这几种数据集合在Python中也是蛮重要的&#xff0c;对于新手比较友好。 本文例题大多来自哔站up主鱼C-小甲鱼【Python教程】的练习过程&#xff0c…

第一批AI原住民开始变现:9岁小学生,用大模型写书赚1个w

前言 当人们正在观望&#xff0c;AI什么时候抢走自己的饭碗时&#xff0c;北京一名9岁的小学生在AI的帮助下写了一本小说&#xff0c;并赚到了2万元的版税。 这件看似不可思议的事&#xff0c;他是如何做到的&#xff1f;此外&#xff0c;他还带来一个启发&#xff1a;面对AI时…

SpringBoot教程(二十四) | SpringBoot集成AOP实现日志记录

SpringBoot教程&#xff08;二十四&#xff09; | SpringBoot集成AOP实现日志记录 &#xff08;一&#xff09;AOP 概要1. 什么是 AOP &#xff1f;2. 为什么要用 AOP&#xff1f;3. AOP一般用来干什么&#xff1f;4. AOP 的核心概念 &#xff08;二&#xff09;Spring AOP1. 简…

外部环境连接kafka

修改配置文件外部环境连接kafka 1、kafka的docker官方镜像地址2、kafka官方介绍的三种连接方式3、方式一&#xff1a;Default configs默认配置4、方式二&#xff1a;File input&#xff08;文件输入&#xff1a;外部配置文件替换docker容器内的配置文件&#xff09;4.1、首先查…

PHP导出生成PDF文件开源组件:mPDF使用详情

最近在使用php要实现一个把旅游线路导出成pdf文件下载&#xff0c;在全网搜索了一遍有几个常用的开源组件&#xff0c;在PHP中生成PDF文件&#xff0c;比如FPDF、TCPDF、mPDF等。在对比了一圈后就 mPDF开源地址&#xff1a; https://github.com/mpdf/mpdf mPDF版本说明 PHP…

【学术会议征稿】2024年计算机与信息安全国际会议(WCCIS 2024)

2024年计算机与信息安全国际会议&#xff08;WCCIS 2024&#xff09; 2024 World Conference of Computer and Information Security 由马来亚大学主办&#xff0c;2024年计算机与信息安全国际会议 (WCCIS 2024) 将于2024年9月20-22日在马来西亚召开。会议旨在为从事计算机与…

一种用于治疗性肽生成的多模态对比扩散模型

文章介绍了一种名为Multi-Modal Contrastive Diffusion (MMCD)的新模型&#xff0c;该模型旨在通过融合肽的序列和结构信息来生成治疗性肽。MMCD利用了一个扩散框架&#xff0c;并在每个扩散时间步中采用了跨模态和模态内的对比学习策略&#xff0c;以捕捉序列和结构之间的一致…

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE啦&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好习惯&#…

消费品行业经销商渠道数据同步及管理究竟如何执行?

在端到端的时代&#xff0c;消费品行业供应链主要由厂商、经销商和终端构成。然而&#xff0c;厂商在对经销商管理过程中&#xff0c;常常被库存问题所困扰。为确保经销商缺货时能随时供货&#xff0c;厂商往往提前备足产品&#xff0c;维持高库存量。但一旦经销商实际卖货能力…

测量 Redis 服务器的固有延迟

redis-cli --intrinsic-latency redis-cli --intrinsic-latency 命令用于测量 Redis 服务器的固有延迟。 固有延迟指的是 Redis 服务器处理一个命令所需的最短时间&#xff0c;不包括网络延迟。通过这个测量&#xff0c;我们可以了解 Redis 服务器本身的性能&#xff0c;而不…

图像生成模型基础——Stable Diffusion模型介绍

随着人工智能技术的飞速发展&#xff0c;图像生成技术也取得了显著进步。扩散模型&#xff08;Stable Diffusion&#xff09;因其高效性和稳定性而得到广泛关注&#xff0c;目前的大多数生成模型都是以扩散模型为基础进行改进得到。首先简单介绍一下传统人工智能模型和生成模型…

网络安全防渗透实战指南【策略、代码与最佳实践】

网络安全防渗透实战指南【策略、代码与最佳实践】 引言 随着互联网的迅猛发展&#xff0c;网络安全问题日益突出。渗透攻击作为网络攻击的一种常见手段&#xff0c;给企业和个人带来了巨大的威胁和损失。因此&#xff0c;如何有效防止渗透攻击成为网络安全领域的重要课题。本…

企业高性能web服务器知识点合集

文章目录 nginx源码编译安装平滑升级及版本回滚平滑升级版本回滚 服务启动脚本核心配置全局配置参数优化调整root与alias自定义错误日志自定义错误页面检测文件是否存在长链接配置下载服务器的配置 nginx高级配置nginx状态页面压缩功能变量内置变量自定义变量 nginx rewrite指令…

Prometheus 服务发现

1、基于文件的服务发现 基于文件的服务发现是仅仅略优于静态配置的服务发现方式&#xff0c;它不依赖于任何平台或第三方服务&#xff0c;因而也是最为简单和通用的实现方式。 Prometheus Server 会定期从文件中加载 Target 信息&#xff0c;文件可使用 YAML 和 JSON 格式&…

实战项目:自主HTTP服务器

0. 项目介绍 本项目实现的是一个HTTP服务器&#xff0c;项目中将会通过基本的网络套接字读取客户端发来的HTTP请求并进行分析&#xff0c;最终构建HTTP响应并返回给客户端完成了HTTP服务器后端的处理逻辑&#xff0c;主要完成的是GET和POST请求方法&#xff0c;以及CGI机制的搭…