zoukankan      html  css  js  c++  java
  • NOIP模拟 40

      考得更嘛也不是了。

      不过如果不犯任何低错的话..

      

      T1 我神奇地想要缩减码量

      比如想把尽量多的$b[i]-1$省掉

      于是求$b[i]$的时候先减了个一

      本来是正的

      减完就忘了他应该是非负的了

      于是线段树上查询[1,0]区间,大力RE

      怒丢70

      T2 我打了神奇的递归

      大致:

    int dfs(int x){
        for(int i=head[x];i;i=nx[i]){
            int t=to[i];
            if(t!=f[x]) dfs(x);
        }              
    }
    能吃空512MB的代码

      感觉T2是MVT(...)

      虽然可以被一堆离线算法水过去..

      但是我向来不爱离线..

      所以我认真地打了在线

      

      首先我学了链并

      现有一些树上数据,他们代表一些节点到根的一条路径上所有点的贡献

      我们要查询一些特定数据的合并结果,比如一些链的覆盖,子树不同数问题

      将链底按dfn排序以后

        将每个链底到根的距离累加。(子树不同数里:对于同一种颜色,给每个点的权值+1)

        将相邻两点的LCA到根的距离减去。(给lca的权值-1)

      那么我们发现对于任意一个点

        如果他只在一个点(及其祖先链)上,他被加了一次

        如果他在多个点(或其祖先链)上,他被n个点加了n次,同时又被(n-1)个lca减了(n-1)次

      他的贡献总是只被计算一次

      于是链的覆盖便很好理解了,但是这子树不同数是怎么回事..

      

      那么其实子树不同数问题里,每个点上带的数据没什么意义,它是一种差分

      从树叶到根方向的差分。

      所以只有求和才有意义,一颗子树里所有点权值的和就是这颗子树里颜色的个数。

      因为保证了,一种颜色只被加了一次...

      这么看来这两个问题好像差不多,一个是前缀和的差分得到实际值,一个是差分的求和得到实际值。

      T3 我打了神奇的DP

      我不会证的那种

  • 相关阅读:
    内网穿透教程
    深入浅出 TCP/IP 协议栈
    STM32CUBEMX配置RTC闹钟
    RT-Thread STM32 系列 BSP 制作教程
    RT-Thread 在stm小内存系列产品的nano+msh完整移植教程
    C语言字符串与数字相互转换
    SD卡 TF卡 接口引脚定义
    定位数据格式
    安信可ESP-12F连接阿里云教程
    电脑使用网络调试助手连接阿里云步骤
  • 原文地址:https://www.cnblogs.com/yxsplayxs/p/11486669.html
Copyright © 2011-2022 走看看