当前位置: 首页 > 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.jsqmd.com/news/21665/

相关文章:

  • 10.24每日总结
  • 利用Eval Villain挖掘CSPT漏洞的完整指南
  • Button按钮插入图片后仍有白色边框的解决办法
  • Unity静态资源优化
  • 【Java】Spring @Transactional 事务失效:9大经典『陷阱』及终极解决方案
  • 【模板】动态 dp 学习笔记(树剖版)
  • ABP - JWT 鉴权(JWT Authentication)[AbpJwtBearerModule、JwtBearerOptions]
  • 软考四
  • CSP-S2022
  • Hugo主题定制速查手册
  • 10/24
  • Hugo主题的修改和配置
  • 多元生成函数+多项式方程组——[AGC058D] Yet Another ABC String
  • 最小生成树 kruskal算法
  • Tarjan练习
  • Python开发之设置Hugging Face的模型缓存目录(HF_HOME )及模型下载超时问题(HF_ENDPOINT)
  • Java中的字符串及相关类的介绍
  • 洛谷 P9530 Fish 2
  • 10.24上课笔记
  • 洛谷 P7011 Escape
  • 你可以把它喂给AI让AI猜猜我在干什么
  • nginx反向代理和负载均衡 - 实践
  • ABP - 审计日志 [AuditedAttribute、IAuditingManager、EntityAuditingHelper]
  • 【深入浅出Nodejs】异步非阻塞IO
  • P1601题解
  • 10-23 好题选讲总结
  • 关于驻马店市 2025 中小学信息学竞赛的记录(入门级)(未完)
  • 关于Markdown的使用
  • 自定义Spring Cloud LoadBalancer实践
  • 游记——驻马店市2025中小学信息学竞赛(未完)