1 条题解

  • 0
    @ 2025-8-24 23:01:27

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar tzl_Dedicatus545
    忙碌着 无为着 继续

    搬运于2025-08-24 23:01:27,当前版本为作者最后更新于2024-11-04 15:08:57,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    以及 ppip 是什么啊????他那个题解我现在还没看懂。误导我这种小朋友有意思吗?

    我的做法大概只需要点分治和树状数组,是不是很纯良!!!1

    但是我树状数组 nn 写小了,调了 1h,怎么回事捏?

    Page 3.

    首先我们点分治,计算经过分治重心 rr 的方案数,经典的,我们不考虑算重(实际上两个到根的链在一个子树内),而是对每个子树做容斥。

    我们对 uru\to rrvr \to v 产生的加油分别计算,特别的,rr 本身的贡献我们在 rvr\to v 部分计算。

    对每个点,我们记录 fuf_u 表示:如果在 uu 点加过油,下次加油在何处?(只考虑 uru\to r

    显然 ff 只要在 uru\to r 的链上二分就行了,顺理成章的,uru \to r 部分可以 Θ(nlogn)\Theta(n\log n) 计算。

    rvr\to v 如何计算?首先在加油地点本身计算是毫无道理的(考虑目的地不同可能会导致加油地不同)

    我们记 huh_u 表示有多少点 uu 最终会在 faufa_u 处加油,其对答案的贡献就是 szusz_u

    这样就可以转移了啊!初始的第一次“经过 rr”的贡献是简单的,接下来就只在 vrv\to r 链上转移了,我们对此用数据结构维护就行了。

    大概是单点加,区间查,但是树状数组不能动态开点/ll,所以你要写线段树。

    时间复杂度 Θ(nlog2n)\Theta(n\log^2{n})

    • 1

    信息

    ID
    10576
    时间
    3500ms
    内存
    2048MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者