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)]]--;

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

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

       

  • 相关阅读:
    MySql
    027 mysql
    navicat
    基于阿里云资源的分布式部署方案
    translate(50%,50%) 实现水平垂直居中
    SSH2 协议详解
    DNS服务配置篇 巴哥学Server2003
    Java 8 后的新功能梳理
    IBM Cognos BI 最佳实践系列 网站地址
    jsf2.0 入门视频 教程
  • 原文地址:https://www.cnblogs.com/kamimxr/p/11279041.html
Copyright © 2011-2022 走看看