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

P10838 『FLA - I』庭中有奇树

前言

本题解较为基础,推导如何得出二分解题思路。

题目大意

给出无根带权树,双方采取最佳策略,求节点S->T的最短路。

有两种操作:

  • 我方至多可以使用一次传送,花费k元从a传送到b(ab不能相邻)。
  • 敌方至多可以把m条道路的传送消耗设置为1e9元(单向设置,如设置a->b消耗不影响b->a)。

思路

显然的,答案可以分两种情况。

不使用传送

对方的操作不用看,答案直接S->T的最短路。

使用传送

设传送起点为u,传送终点为v。总体流程为S->u然后传送到v然后v->T。

别忘了此处u,v不能相邻。

d i s S [ i ] disS[i] disS[i]为i距起点距离, d i s T [ i ] disT[i] disT[i]为i距终点距离。答案即 d i s S [ u ] + k + d i s T [ v ] disS[u] + k + disT[v] disS[u]+k+disT[v]

通过 d f s dfs dfs预处理,我们可以在 O ( n ) O(n) O(n)得出 d i s S disS disS d i s T disT disT

使用传送的情况下,还可以再细分出两种答案。

通过对手限制的道路

消耗都是 1 e 9 1e9 1e9,所以传送越早越好。答案就是 1 e 9 1e9 1e9

如果S和T相邻的话,因为边权 < = 1 e 9 <=1e9 <=1e9,最后答案取min不会造成问题。

不通过对手限制的道路

不妨先试举几个m。

如果对方的m为0,那么答案就是最小的 ( d i s S [ u ] + d i s T [ v ] ) (disS[u] + disT[v]) (disS[u]+disT[v])然后+k。

如果对方的m为1,那么答案就是第二小的 ( d i s S [ u ] + d i s T [ v ] ) (disS[u] + disT[v]) (disS[u]+disT[v])然后+k。

朴素的想法是,暴力求出所有u,v的可能组合,其中的第m+1小 ( d i s S [ u ] + d i s T [ v ] ) + k (disS[u] + disT[v])+k (disS[u]+disT[v])+k就是答案。但是复杂度到达 n 2 n^2 n2,会tle。

直接寻找第k小显然超时。我们可以反向思考另一个问题:给出一个数字x,x在是第几小?如果能在 O ( n l o g n ) O(nlog\ n) O(nlog n)的级别以内解决这个新问题,我们只需要再套上 O ( l o g v ) O(log\ v) O(log v)二分即可获得答案。

此处反向思考是经典的第k小问题。给出例题

如何解决新问题?

我们枚举u,即固定了 d i s [ u ] dis[u] dis[u],只需要获取所有满足 d i s S [ u ] + d i s T [ v ] < = x disS[u] + disT[v] <= x disS[u]+disT[v]<=x d i s T [ v ] < = x − d i s S [ u ] disT[v] <= x - disS[u] disT[v]<=xdisS[u]

我们可以提前维护一个升序的 d i s T disT disT,再进行一次二分即可获得答案。总复杂度是 O ( n l o g n ) O(nlog\ n) O(nlog n)

此处需注意u,v不能相邻。在得到答案后,

还需枚举u的邻边y,如果 d i s S [ u ] + d i s T [ y ] < = x disS[u] + disT[y] <= x disS[u]+disT[y]<=x答案需减一。

以及考虑 d i s S [ u ] + d i s T [ u ] < = x disS[u] + disT[u] <= x disS[u]+disT[u]<=x

总结

现在我们有三部分答案

  1. 不使用传送,即 d i s T [ S ] disT[S] disT[S]
  2. 使用传送,并通过对手设置路段,即1e9
  3. 使用传送,并不通过对手设置路段,即二分出的x

三者最小即为答案。

代码如下

#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
using ll = long long;
using pll = pair<ll, ll>;
const ll N = 1e5 + 5;
int n, m, k, S, T;
vector<pll> e[N];
ll disS[N], disT[N]; //距起点和终点的距离
ll tmp[N];           //维护升序的disT用来二分
void dfs(int u, int fa, ll *dis) {for (auto &[v, w] : e[u]) {if (v == fa) continue;dis[v] = dis[u] + w;dfs(v, u, dis);}
}
bool check(ll x) {ll sum = 0;for (int u = 1; u <= n; u++) {sum += upper_bound(tmp + 1, tmp + 1 + n, x - disS[u]) - tmp - 1;for (auto &[v, w] : e[u]) { //邻边if (disS[u] + disT[v] <= x) sum--;}if (disS[u] + disT[u] <= x) sum--; //自身}return sum > m;
}
void solve() {cin >> n >> m >> k >> S >> T;for (int i = 1; i < n; i++) {int u, v, w;cin >> u >> v >> w;e[u].push_back({v, w});e[v].push_back({u, w});}dfs(S, 0, disS);dfs(T, 0, disT);for (int i = 1; i <= n; i++) tmp[i] = disT[i];sort(tmp + 1, tmp + 1 + n);ll l = 0, r = 1e18;while (l <= r) {ll mid = l + (r - l) / 2;if (check(mid)) {r = mid - 1;} else {l = mid + 1;}}cout << min({l + k, (ll)1e9, disT[S]}) << endl;
}int main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);solve();return 0;
}

相关文章:

P10838 『FLA - I』庭中有奇树

前言 本题解较为基础&#xff0c;推导如何得出二分解题思路。 题目大意 给出无根带权树&#xff0c;双方采取最佳策略&#xff0c;求节点S->T的最短路。 有两种操作&#xff1a; 我方至多可以使用一次传送&#xff0c;花费k元从a传送到b&#xff08;ab不能相邻&#xf…...

WebRTC简介

WebRTC简介 WebRTC&#xff08;Web Real-Time Communication&#xff09;是一项开源的实时通信技术&#xff0c;它允许网页浏览器进行实时语音、视频和数据共享通信&#xff0c;而无需安装额外的插件或应用程序。WebRTC的出现极大地简化了实时通信的开发和部署过程&#xff0c…...

一套直播系统带商城源码 附搭建教程

本站没搭建测试过&#xff0c;有兴趣的自己折腾了&#xff0c;内含教程&#xff01; 功能介绍&#xff1a; 礼物系统&#xff1a;普通礼物、豪华礼物、热门礼物、守护礼物、幸运礼物 提现方式&#xff1a;统一平台提现日期及方式&#xff0c;方便用户执行充值提现操作 连麦…...

Netty 总结与补充(十)

简单介绍一下 Netty&#xff1f;你为什么会用到Netty&#xff1f;说说你对Netty的认识&#xff1f;为什么选用Netty来做通信框架&#xff1f; Netty 是一个高性能、异步事件驱动的 NIO 框架&#xff0c;它提供了对 TCP、UDP 和文件传输的支持&#xff0c;作为一个异步 NIO 框架…...

循环实现异步变同步的问题

一、背景 在开发中遇到在循环中调用异步接口的问题&#xff0c;导致页面渲染完成时&#xff0c;没有展示接口返回后拼接的数组数据。二、问题 在代码中使用了map进行循环&#xff0c;导致调用接口的时候处于异步。this.form.list.map(async el>{el.fileList [];if(el.pic…...

测试GPT4o分析巴黎奥运会奖牌数据

使用GPT4o快速调用python代码&#xff0c;生成数据图表 测试GPT4o分析巴黎奥运会奖牌数据 测试GPT4o分析巴黎奥运会奖牌数据 1.首先我们让他给我们生成下当前奥运奖牌数 2.然后我们直接让GPT帮我们运行python代码&#xff0c;并生成奥运会奖牌图表 3.我们还可以让他帮我们…...

TF卡(SD NAND)参考设计和使用提示

目录 电路设计 Layout 设计说明 贴片注意事项 电路设计 1、参考电路&#xff1a; R1~R5 (10K-100 kΩ)是上拉电阻&#xff0c;当SD NAND处于高阻抗模式时&#xff0c;保护CMD和DAT线免受总线浮动。 即使主机使用SD NAND SD模式下的1位模式&#xff0c;主机也应通过上拉电…...

电源芯片负载调整率测试方法、原理以及自动化测试的优势-纳米软件

在芯片设计研发领域&#xff0c;负载调整率作为稳压电源芯片的关键性能指标&#xff0c;直接关系到芯片的稳定性和可靠性&#xff0c;因此其测试和优化显得尤为重要。以下是对负载调整率测试原理、方法以及使用ATECLOUD-IC芯片测试系统优势的进一步阐述&#xff1a; 负载调整率…...

C++威力强大的助手 --- const

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; C之旅 const是个奇妙且非比寻常的东西&#xff0c;博主从《Effective C》一书中认识到关于const更深层次的理解&#xff0c;写此博客进行巩固。 &#x…...

测试环境搭建整套大数据系统(十八:ubuntu镜像源进行更新)

镜像源更新为清华源 报错显示 解决方案 做好备份 cp /etc/apt/sources.list /etc/apt/sources.list.bak查看配置信息 sudo vim /etc/apt/sources.listsudo sed -i s/cn.archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list sudo apt update...

第128天:内网安全-横向移动IPCATSC 命令Impacket 套件CS 插件全自动

环境部署 案例一&#xff1a; 域横向移动-IPC-命令版-at&schtasks 首先是通过外网web访问到win2008&#xff0c;获得了win2008的权限&#xff0c;这一步不做演示 因为里面的主机都不出网&#xff0c;所以只能利用win2008进行正向或者反向连接 信息收集 域内用户信息&…...

记录一次学习过程(msf、cs的使用、横向渗透等等)

目录 用python搭建一个简单的web服务器 代码解释 MSF msfvenom 功能 用途 查看payloads列表 msfconsole 功能 用途 msfvenom和msfconsole配合使用 来个例子 msf会话中用到的一些命令 在windows中net user用法 列出所有用户账户 显示单个用户账户信息 创建用户账…...

C#中DataTable新增列、删除列、更改列名、交换列位置

C#中DataTable新增列、删除列、更改列名、交换列位置 一、新增列 1.1、新增列 /*新增列*/ dataTable.Columns.Add("列名称", Type.GetType("数据类型")); /*比如添加【name】列&#xff0c;string类型的内容*/ dataTable.Columns.Add("name&…...

C#编写多导联扫描式的波形图Demo

本代码调用ZedGraph绘图框架&#xff0c;自己先安装好ZedGraph环境&#xff0c;然后拖一个zedGraphControl控件就行了&#xff0c;直接黏贴下面代码 基本代码显示 using System; using System.Windows.Forms; using ZedGraph; using System.Timers;namespace ECGPlot {public…...

QT网络编程

Qt 给用户提供了网络编程的接口&#xff0c;包括TCP、UDP、HTTP三种协议的API以及各种类&#xff0c;可以了解一下。 而在 QT 中想要使用网络编程&#xff0c;必须在pro文件中添加 network 模块&#xff0c;否则无法包含网络编程所需的头文件。 UDP UDP是传输层的协议&#…...

Django ASGI服务

1. ASGI简介 在Django中, ASGI(Asynchronous Server Gateway Interface)的引入使得Django应用能够支持异步编程. 从Django 3.0开始, Django就增加了对ASGI的支持, 但直到Django 3.1才正式推荐在生产环境中使用ASGI. ASGI是一个用于Python的异步Web服务器的标准接口, 它允许你运…...

Servlet(2)

1、WebServlet 这个注解可以用来修饰一个Servlet类&#xff0c;可以简化配置&#xff0c;替代Web.xml中 的servlet配置 ①value属性 表示指定某个url-pattern ②urlPatterns属性 表示接受多个不同的url-pattern,多个值写在一对{}中&#xff0c;逗号分隔 补充;url-pattern…...

电竞玩家的云端盛宴!四大云电脑平台:ToDesk、顺网云、青椒云、极云普惠云实测大比拼

本文目录 一、云电脑概念及市场需求二、云电竞性能测试2.1 ToDesk云电脑2.2 顺网云2.3 青椒云2.4 极云普惠云电脑 三、四大云电脑平台综合配置对比3.1 CPU处理器3.2 GPU显卡3.3 内存 四、总结 一、云电脑概念及市场需求 在数字化时代的推动下&#xff0c;云计算技术日益成熟&a…...

基础复习(反射、注解、动态代理)

反射 反射&#xff0c;指的是加载类的字节码到内存&#xff0c;并以编程的方法解刨出类中的各个成分&#xff08;成员变量、方法、构造器等&#xff09;。 1.获取类的字节码 &#xff08;3种方式&#xff09; public class Test1Class{public static void main(String[] arg…...

OGG同步目标端中文乱码处理

现象说明&#xff1a; 源端字符集&#xff1a;AMERICAN_AMERICA.ZHS16GBK 目标端字符集&#xff1a;AMERICAN_AMERICA.AL32UTF8 源端同步过来的数据显示中文乱码。 查询数据库表中含有乱码的字段&#xff1a; select * from xx.xxxx a where to_char(a.crtopetime,yyyy-mm-…...

2026在线测评系统十大量表对比:信效度与场景全解析

【30s 核心摘要】2026 年在线测评成人才管理刚需&#xff0c;信效度与场景适配成选型核心。本文聚焦十大量表&#xff0c;从信度、效度、适配场景等维度深度对比&#xff0c;重点解析问卷星、北森、金数据等主流平台的量表能力与落地效果&#xff0c;为企业、高校及机构提供科学…...

微信小程序3D开发框架技术对比:XR-Frame与threejs-miniprogram

随着微信小程序逐步支持3D渲染与AR能力&#xff0c;开发者面临两个主要官方方案&#xff1a;自研的XR-Frame和适配Three.js的threejs-miniprogram。本文将从架构设计、渲染机制、功能集成、开发模式及适用场景等维度进行技术分析&#xff0c;为技术选型提供参考。一、XR-Frame&…...

METSO A413248自动化系统

METSO A413248 自动化系统模块产品特点&#xff1a; 品牌归属&#xff1a;芬兰METSO&#xff08;美卓&#xff09;工业自动化系统原装备件。 产品类型&#xff1a;工业级自动化控制模块/接口模块。 核心功能&#xff1a;用于控制信号处理、数据采集及系统集成。 系统兼容&am…...

16个分片+2副本:pg_shard的master_create_worker_shards最佳实践

16个分片2副本&#xff1a;pg_shard的master_create_worker_shards最佳实践 【免费下载链接】pg_shard ATTENTION: pg_shard is superseded by Citus, its more powerful replacement 项目地址: https://gitcode.com/gh_mirrors/pg/pg_shard pg_shard作为PostgreSQL的分…...

艾尔登法环存档迁移终极指南:3分钟解决角色转移难题

艾尔登法环存档迁移终极指南&#xff1a;3分钟解决角色转移难题 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 还在为《艾尔登法环》存档版本不兼容而烦恼吗&#xff1f;EldenRingSaveCopier 是你的终极解决…...

DeepSeek重复代码识别失效了?5个被90%团队忽略的AST解析盲区及修复清单

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek代码重复检测失效的真相与影响 DeepSeek-R1 模型在代码理解任务中表现出色&#xff0c;但其内置的代码重复检测机制在特定场景下存在系统性失效。根本原因在于模型对语义等价但语法结构差异显著的代…...

CA-CFAR、GO-CFAR、SO-CFAR怎么选?一张图看懂三种恒虚警检测算法的适用场景与避坑指南

CA-CFAR、GO-CFAR、SO-CFAR工程选型指南&#xff1a;从算法原理到场景适配 雷达信号处理工程师常常面临一个经典难题&#xff1a;在复杂环境中如何选择合适的恒虚警检测算法&#xff1f;当海面杂波、多目标干扰或低信噪比条件同时出现时&#xff0c;CA、GO、SO三种CFAR变体的性…...

Hitboxer:终极SOCD按键重映射解决方案,彻底解决游戏按键冲突问题

Hitboxer&#xff1a;终极SOCD按键重映射解决方案&#xff0c;彻底解决游戏按键冲突问题 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在激烈的游戏对战中&#xff0c;你是否曾因同时按下左右方向键而导致角色…...

从原理到防御:手把手教你用Python模拟ZipCrypto加密,理解密码为何能被‘撞开’

从零构建ZipCrypto加密模拟器&#xff1a;Python实战与密码安全深度解析 当你用鼠标双击那个带锁的ZIP图标&#xff0c;输入密码后看到文件顺利解压时&#xff0c;是否好奇过背后的魔法&#xff1f;现代加密算法就像数字世界的机械钟表——精密的齿轮咬合运转&#xff0c;而我们…...

一文讲透|高效论文写作全流程AI论文工具推荐(2026 最新)

论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节&#xff0c;以下工具按环节精准匹配&#xff0c;兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求&#xff0c;覆盖免费/付费、通用/垂直场景。2026年&am…...