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的 考虑长链剖分优化

  • 相关阅读:
    Spring spEL
    Spring 使用外部部署文件
    Spring 自动装配
    spring 属性配置细节
    hdu 1054 Strategic Game
    fzu 2037 Maximum Value Problem
    将博客搬至CSDN
    HDU 4714 Tree2Cycle
    HDU 1009 The Shortest Path in Nya Graph
    POJ 1942 Paths on a Grid 组合数的优化
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/9443208.html
Copyright © 2011-2022 走看看