zoukankan      html  css  js  c++  java
  • 洛谷 P3258 松鼠的新家 题解

    题面

    貌似这道题暴力加玄学优化就可以AC?

    下面是正解:

      1.树链剖分:

       我们在u到v之间都放一个糖果,可以将松鼠它家u到v的糖果数都加1。每一次将a[i]到a[i+1] (a数组是访问顺序)的节点加1,可以用树链剖分来维护。查询只需要查每个点的权值就可以了。(貌似该题比树剖板子还板子?)

     2.树上查分:重点来了!(敲黑板!!!)

            本题的题意便是统计一条路径上所有点的经过次数。

       已知原数组a[i]表示每个点的点权,设差分数组s[i]=a[i]-sum(a[j])(j为i的每个直接相连的儿子);

          叶子节点的b[i]恰好为该点点权a[i];

       对于任意一个节点k,a[k]=以k为根节点的子树中所有s[i]之和。

       设差分数组s[],对于每次操作,

        s[u]++;

        s[v]++;

        s[LCA(u,v)]--;

        s[fa[LCA(u,v)]]--;

          这是点权的情况,如果是边权,只需要把一个点到父亲的边权赋给自己当作点权,

          然后当作点权的情况做就好了,细节需要处理一下。

       

  • 相关阅读:
    每天一个linux命令:head(15)
    用设计模式来替代if-else
    每天一个linux命令:less(14)
    每天一个linux命令:more(13)
    每天一个linux命令:nl(12)
    CDN是什么鬼
    ajax跨域问题
    PDO和MySQLi区别与选择?
    php 依赖注入 和 控制反转 php设计模式
    理解 PHP 依赖注入
  • 原文地址:https://www.cnblogs.com/kamimxr/p/11279041.html
Copyright © 2011-2022 走看看