第二十七次

A

答案等于 i=1nj=i+1nd(i,j)2,于是随便怎么求一下,比如换根 DP。

B

维护 n 棵 01Trie,第 i 棵维护集合中 i 的倍数,插入 x 时,d|xx 插入第 d 棵 01Trie,

查询 x,k,s 时,在第 k 棵 01Trie 中查 sx 的,异或 x 最大的数,

维护子树最小值,贪心进入某棵子树时判一下这个子树里有没有 sx 的点,没有就不能进。

C

来点神秘做法,复杂度是对的,而且会比 DP 优。

考虑逐个二分,发现复杂度 O(nmlogV) 寄了。

考虑加点剪枝,发现若某段行程的答案 当前答案则不用对它二分,而这个判断可以 O(n) 完成。

此时只会在每个前缀最大值处二分,发现答案递增还是会寄,

于是使用小杀招,shuffle 所有行程,此时前缀最大值只有 logm 个,总复杂度 O(nlogmlogV+nm)

D

u 路径的起点在 v 路径上,则 u 必须比 v 先走,

u 路径的终点在 v 路径上,则 v 必须比 u 先走。

考虑建图,边 uv 存在当且仅当 u 必须比 v 先走,

若建出的图有拓扑序,则按拓扑序操作即可,否则无解。

建图的复杂度太高,于是考虑线段树优化建图,分别考虑两个要求:

u 路径的起点在 v 路径上,则 u 必须比 v 先走

把每条路径向其起点连边,然后把每条路径除起点外的点向这条路径连边,

此时 u 连向 u 的起点,而 u 路径的起点在 v 路径上,所以 u 的起点连向 v

u 路径的终点在 v 路径上,则 v 必须比 u 先走

把每个终点向其路径连边,然后把每条路径向这条路径除终点外的点连边,

此时 u 路径的终点在 v 路径上,所以 v 连向 u 的终点,而 u 的终点连向 u

posted @   Jijidawang  阅读(5)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示