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

杂题选做-3

杂题选做-3

#21 P9755

题目传送门

首先,看上去这个题直接不是很友好,我们考虑二分转为判断性问题。

然后一个这类在树上 topo 遍历每一个节点的最优方案类问题有一个 Trick:我们找出当前最优的节点,将其与其父亲合并。

具体地,在确定一个答案 \(T\) 之后,我们可以在 \(O(1)\) 的时间内求出或通过二分在 \(O(\log n)\) 的时间内每一个点的最晚访问时间 \(t_i\)。具体地,我们可以先预处理每一个节点的一次函数值什么时候小于 \(1\),优先统计 \(1\) 的贡献,然后对剩余部分我们就考虑对 \(b_i\)\(c_ix\) 分别求和。

然后我们只需要考虑两个问题:

  • 怎么判断一个节点是否比另一个节点更优(确定排序规则);

  • 怎么合并一个节点和其父亲;

我们优先思考第二个问题。我们在合并完一个节点后,这个新节点的最晚的访问时为 \(t_i-1\)。因为 \(t_i\) 是合并前的最小时间点,所以 \(t_i-1\) 也一定是合并后的最小时间点。

因此我们发现可以简化上述流程:直接找到当前时间点最小的点,然后直接把它到根的所有未访问点访问。

时间复杂度为 \(O(n \log V \log n)\),可以通过数学推导优化到 \(O(n \log V)\)

#22 P8817

题目传送门

看到 \(n \le 2500\),且边权为 \(1\)。我们就知道可以在 \(O(n^2)\) 的时间内用 01 bfs 预处理出任意两点间的距离。

然后我们考虑一个问题,假如我们确定了 \(b,c\),那么我们希望取到 \(b\) 可达的点中,权值最大的点,和 \(c\) 可达的点中,权值最大的点。

但是这两个点可能相同,或者与 \(b,c\) 相同,但是可以确定的是,我们只需要枚举前 \(3\) 大的节点即可。

时间复杂度为 \(O(n^2)\)

http://www.hskmm.com/?act=detail&tid=38404

相关文章:

  • 10.24每日总结
  • 利用Eval Villain挖掘CSPT漏洞的完整指南
  • Button按钮插入图片后仍有白色边框的解决办法
  • Hugo主题的修改和配置
  • 多元生成函数+多项式方程组——[AGC058D] Yet Another ABC String
  • ABP - JWT 鉴权(JWT Authentication)[AbpJwtBearerModule、JwtBearerOptions]
  • 最小生成树 kruskal算法
  • 【Java】Synchronized-你知道Java是如何上锁的吗?
  • Java中的字符串及相关类的介绍
  • ABP - 工作单元(Unit of Work)[UnitOfWorkAttribute、IUnitOfWorkManager、UnitOfWorkOptions]
  • LeetCode刷题笔记
  • [NOIP2023] 双序列拓展 题解
  • 洛谷 P9530 Fish 2
  • 洛谷 P7011 Escape
  • 你可以把它喂给AI让AI猜猜我在干什么
  • 【深入浅出Nodejs】异步非阻塞IO
  • 135. 分发糖果
  • 【Java-JMM】Happens-before原则
  • P6072 『MdOI R1』Path
  • P1601题解
  • 10-23 好题选讲总结
  • 关于驻马店市 2025 中小学信息学竞赛的记录(入门级)(未完)
  • 关于Markdown的使用
  • 自定义Spring Cloud LoadBalancer实践
  • 游记——驻马店市2025中小学信息学竞赛(未完)
  • 线段树上二分
  • ABP - SqlSugar [SqlSugarModule、ISqlSugarClient、SqlSugarRepository]
  • Odoo18.0 对接 京东快递
  • SAP折旧模拟超过1000条资产dump问题及解决
  • [python] 代码性能分析工具line_profiler使用指北