【2020.11.25提高组模拟】小 T 与灵石(stone) 题解

题意简述

给一棵根为\(1\)的树。一共\(q\)次操作,每次选\(k_i\)个节点\(p_1,p_2,\dots,p_{k_i}\)。设\(f_{x,i}\)表示\(k_i\)个点中所有点\(p_j\)到点\(x\)的最远距离,即\(max_{j=1}^{k_i}{dis(x,p_i)}\),再设\(g_x\)表示\(q\)次询问中\(f_x\)的最小值,即\(min_{i=1}^{k_i}{f_{x,i}}\)。对于每个点\(x\)求出\(g_x\)。

\(1\le n,q\le3\times 10^5,\sum_{i=1}^qk_i\le10^6\)。

Solution

每次操作只有选的点中最远的一对点(可理解为标记点集合的直径)会对点x有影响。这个可以用直径的定义:图中最远点对 来证明。再把这个直径点对合并成一个点,即新建直径中点(若在边上就把边拆开),标记这个点。为了避免小数,只需把原本每条边的边权乘以2。

新建了树以后,原问题转化为了求每个点到标记点的最短距离,直接搜索即可。

那么,我们需要做的操作有:

找出给定点集的直径

直径两端点的其中一个端点一定是所以给定点中深度最大的点,另一个就用\(LCA\)求距离来找。

若用\(O(n)\)算法找直径的话,会超时。

倍增\(LCA\)是\(O(\log)\)的,理论很不错但是就是过不去。

更好的方法:用欧拉序\(O(n\log n)\)预处理,\(O(n)\)查询求\(LCA\),接下来就写这个!,而且要手动数组模拟栈\(dfs\),递归\(dfs\)会爆栈。

将直径两端点缩成一个新点

设直径端点为\(a\),\(b\),直径中点为\(mid\)。

\[max(dis_{x\to a},dis_{x\to b})=dis_{x\to mid}+dis_{a\to b}
\]

然后用倍增(类似于倍增求\(LCA\))求\(dis_{x\to mid}\)。

找到每个点最近的标记点

这个要反过来考虑+换根\(dp\)才能\(O(n)\)。

换根\(dp\)模板题:洛谷P3478 [POI2008] STA-Station

\(Poi\sim\)

注意

  • 求欧拉序一定要用\(dfs\),但是\(dfs\)会爆栈,所以要手动模拟栈……
  • 倍增求\(LCA\)是卡不过去的。
  • \(\log\)不过10万,出题人没\(*\)。

Plan

以下列出我要写的步骤

  • 模拟栈$dfs$求深度和欧拉序
  • $ST$表预处理$LCA$
  • 倍增$LCA$求直径中点
  • 新建直径中点
  • 换根$dp$
  • Code

    【2020.11.25提高组模拟】小 T 与灵石(stone) 题解的更多相关文章

    1. 【2020.11.28提高组模拟】T1染色(color)

      [2020.11.28提高组模拟]T1染色(color) 题目 题目描述 给定 \(n\),你现在需要给整数 \(1\) 到 \(n\) 进行染色,使得对于所有的 \(1\leq i<j\leq ...

    2. 【2020.11.28提高组模拟】T2 序列(array)

      序列(array) 题目描述 ​给定一个长为 \(m\) 的序列 \(a\). 有一个长为 \(m\) 的序列 \(b\),需满足 \(0\leq b_i \leq n\),\(\sum_{i=1}^ ...

    3. 【2020.11.30提高组模拟】剪辣椒(chilli)

      剪辣椒(chilli) 题目描述 在花园里劳累了一上午之后,你决定用自己种的干辣椒奖励自己. 你有n个辣椒,这些辣椒用n-1条绳子连接在一起,任意两个辣椒通过用若干个绳子相连,即形成一棵树. 你决定分 ...

    4. 【2020.11.30提高组模拟】删边(delete)

      删边(delete) 题目 题目描述 给你一棵n个结点的树,每个结点有一个权值,删除一条边的费用为该边连接的两个子树中结点权值最大值之和.现要删除树中的所有边,删除边的顺序可以任意设定,请计算出所有方 ...

    5. JZOJ 【2020.11.30提高组模拟】剪辣椒(chilli)

      题目大意 给出一棵 \(n\) 个节点的树,删去其中两条边 使得分出的三个子树大小中最大与最小的差最小 分析 先一边 \(dfs\) 预处理出以 \(1\) 为根每个点的 \(size\) 然后按 \ ...

    6. JZOJ 6904. 【2020.11.28提高组模拟】T3 树上询问(query)

      题目 你有一棵 \(n\) 节点的树 ,回答 \(m\) 个询问,每次询问给你两个整数 \(l,r\) ,问存在多少个整数 \(k\) 使得从 \(l\) 沿着 \(l \to r\) 的简单路径走 ...

    7. 11.5NOIP2018提高组模拟题

      书信(letter) Description 有 n 个小朋友, 编号为 1 到 n, 他们每人写了一封信, 放到了一个信箱里, 接下来每个人从中抽取一封书信. 显然, 这样一共有 n!种拿到书信的情 ...

    8. 【2020.12.03提高组模拟】A组反思

      估计:40+10+0+0=50 实际:40+10+0+0=50 rank40 T1 赛时看到\(n,m\leq9\),我当机立断决定打表,暴力打了几个点之后发现在\(n\ne m\)且\(k\ne0\ ...

    9. 【2020.12.01提高组模拟】卡特兰数(catalan)

      题目 题目描述 今天,接触信息学不久的小\(A\)刚刚学习了卡特兰数. 卡特兰数的一个经典定义是,将\(n\)个数依次入栈,合法的出栈序列个数. 小\(A\)觉得这样的情况太平凡了.于是,他给出了\( ...

    10. 【2020.12.01提高组模拟】A组反思

      105,rk45 T1 赛时一开始先打了\(m=0\)的情况,也就是普通的卡特兰数,然后打了暴力,样例过了,把样例改改就不行了,原因没有保证是枚举的是合法的出栈序列 得分:\(WA\&TLE1 ...

    随机推荐

    1. python 二级 程序控制结构

      二分支结构简略写法: 异常

    2. SpringBoot整合Dubbox(无XML配置)

      简介 Dubbox是当当网对阿里的Dubbo进行增强的一个分支.在使用springboot之后,我们发现很多配置并不一定要使用xml.这篇文章的目的是让你使用Dubbox时能像使用springboot ...

    3. goland Cannot resolve import 'google/api/annotations.proto'

      前言 kratos 项目出现 import 标红,但是 $GOPATH/src/google/api/annotations.proto 已经存在了. 解决 路径:Goland > Settin ...

    4. 1、从DeepSeek API调用到Semantic Kernel集成:深度解析聊天机器人开发全链路

      引言:AI时代下的聊天机器人开发范式演进 在生成式AI技术爆发的当下,基于大语言模型(LLM)的聊天机器人开发已形成标准化技术链路.本文将结合DeepSeek API与微软Semantic Kerne ...

    5. 解决Oracle锁表情况

      在使用Oracle数据库更新数据的时候,有两种查询方式可以修改编辑数据: select t.*,t.rowid from table t select * from table for update ...

    6. 【Linux】3.8 Linux磁盘分区、挂载

      Linux磁盘分区.挂载 1. 分区方式 mbr分区 最多支持四个主分区 系统只能安装在主分区 扩展分区要占一个主分区 MBR最大只支持2TB,但拥有最好的兼容性 gpt分区 支持无限多个主分区(但操 ...

    7. DeepSeek 聊天机器人项目

      想要更深入玩转聊天机器人开发? 推荐本文档 + 课程<DeepSeek 聊天机器人项目>一起学习,效果翻倍! 边学边练,轻松打造智能对话系统~ (๑•̀ㅂ•́)و✧ 快上车,AI 之旅发车 ...

    8. 关于TFDMemtable的使用场景

      TFDMemtable是FireDAC框架的内存数据集组件.也是处理数据最快速的组件.简单说是把数据快储在内存中进行处理,因此其数据是和数据源是隔离的. 使用场景: 1.把一些少量的经常会使用的数据放 ...

    9. JAVA---在idea上实现简易的学生管理系统

      登录需求 代码实现 APP package ITswj.test4_学生管理系统; import java.util.ArrayList; import java.util.Random; impor ...

    10. macOS 和 Windows 操作系统下如何安装和启动 MySQL / Redis 数据库

      你好,我是 Kagol,个人公众号:前端开源星球(欢迎关注我,分享更多前端开源知识). TinyPro 后台管理系统的 NestJS 后端依赖 MySQL 和 Redis 数据库,本文主要带大家安装和 ...