zoukankan      html  css  js  c++  java
  • [bzoj3522][bzoj4543][POI2014]HOTEL

    题解:

    比较难的一道题目

    首先考虑暴力dp

    我们会发现构成这种形状只有三种情况

    1.三个点的lca相同

    2.两个点lca相同,第三个点是lca的祖先

    3.两个点lca相同,第三个点是lca祖先的子树中某点

    对于1,2两种情况是比较好解决的

    对于第3种情况,我们可以考虑放到lca处或者转折处计算

    1.放在lca处计算

    f[i][j]表示考虑i这个点,子树中距离i为j的点的个数

    g[i][j]表示i的祖先的子树中到i距离为j的个数

    不过这样dp的时候,我们需要删除掉当前点的影响

    2.放在转折点计算

    f[i][j]表示考虑i这个点,子树中距离i为j的点的个数

    g[i][j]表示考虑i这个点,其中子树中取两个点,要求满足他们深度相同,并且他们的lca-i的距离+j=他们到lca的距离

    那么考虑一下统计答案

    1.

    2.g[i][0]

    3.令y表示x的父亲 f[y][i]*g[x][i+1]+g[y][i+1]*f[x][i]

    这样是n^2的 考虑长链剖分优化

  • 相关阅读:
    外观模式
    建造者模式
    原型模式
    工厂模式
    单例模式
    设计模式入门
    SpringBoot-SpringMVC开发总结
    SpringBoot日志
    IDEA Basics
    Kafka基础学习
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/9443208.html
Copyright © 2011-2022 走看看