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]<=x−disS[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
总结
现在我们有三部分答案
- 不使用传送,即 d i s T [ S ] disT[S] disT[S]
- 使用传送,并通过对手设置路段,即1e9
- 使用传送,并不通过对手设置路段,即二分出的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』庭中有奇树
前言 本题解较为基础,推导如何得出二分解题思路。 题目大意 给出无根带权树,双方采取最佳策略,求节点S->T的最短路。 有两种操作: 我方至多可以使用一次传送,花费k元从a传送到b(ab不能相邻…...
WebRTC简介
WebRTC简介 WebRTC(Web Real-Time Communication)是一项开源的实时通信技术,它允许网页浏览器进行实时语音、视频和数据共享通信,而无需安装额外的插件或应用程序。WebRTC的出现极大地简化了实时通信的开发和部署过程,…...

一套直播系统带商城源码 附搭建教程
本站没搭建测试过,有兴趣的自己折腾了,内含教程! 功能介绍: 礼物系统:普通礼物、豪华礼物、热门礼物、守护礼物、幸运礼物 提现方式:统一平台提现日期及方式,方便用户执行充值提现操作 连麦…...
Netty 总结与补充(十)
简单介绍一下 Netty?你为什么会用到Netty?说说你对Netty的认识?为什么选用Netty来做通信框架? Netty 是一个高性能、异步事件驱动的 NIO 框架,它提供了对 TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架…...
循环实现异步变同步的问题
一、背景 在开发中遇到在循环中调用异步接口的问题,导致页面渲染完成时,没有展示接口返回后拼接的数组数据。二、问题 在代码中使用了map进行循环,导致调用接口的时候处于异步。this.form.list.map(async el>{el.fileList [];if(el.pic…...

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

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

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

C++威力强大的助手 --- const
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: C之旅 const是个奇妙且非比寻常的东西,博主从《Effective C》一书中认识到关于const更深层次的理解,写此博客进行巩固。 &#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 插件全自动
环境部署 案例一: 域横向移动-IPC-命令版-at&schtasks 首先是通过外网web访问到win2008,获得了win2008的权限,这一步不做演示 因为里面的主机都不出网,所以只能利用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】列,string类型的内容*/ dataTable.Columns.Add("name&…...

C#编写多导联扫描式的波形图Demo
本代码调用ZedGraph绘图框架,自己先安装好ZedGraph环境,然后拖一个zedGraphControl控件就行了,直接黏贴下面代码 基本代码显示 using System; using System.Windows.Forms; using ZedGraph; using System.Timers;namespace ECGPlot {public…...

QT网络编程
Qt 给用户提供了网络编程的接口,包括TCP、UDP、HTTP三种协议的API以及各种类,可以了解一下。 而在 QT 中想要使用网络编程,必须在pro文件中添加 network 模块,否则无法包含网络编程所需的头文件。 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类,可以简化配置,替代Web.xml中 的servlet配置 ①value属性 表示指定某个url-pattern ②urlPatterns属性 表示接受多个不同的url-pattern,多个值写在一对{}中,逗号分隔 补充;url-pattern…...

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

基础复习(反射、注解、动态代理)
反射 反射,指的是加载类的字节码到内存,并以编程的方法解刨出类中的各个成分(成员变量、方法、构造器等)。 1.获取类的字节码 (3种方式) public class Test1Class{public static void main(String[] arg…...

OGG同步目标端中文乱码处理
现象说明: 源端字符集:AMERICAN_AMERICA.ZHS16GBK 目标端字符集:AMERICAN_AMERICA.AL32UTF8 源端同步过来的数据显示中文乱码。 查询数据库表中含有乱码的字段: select * from xx.xxxx a where to_char(a.crtopetime,yyyy-mm-…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学
一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件,其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时,价带电子受激发跃迁至导带,形成电子-空穴对,导致材料电导率显著提升。…...