zoukankan      html  css  js  c++  java
  • loj2665

    题意

    loj

    做法

    下文为方便表示,假定( ext{bfs})序为({1,2,cdots,n})

    定义:令(dfs_i)(i)节点的( ext{dfs})序标号,(pos_i)( ext{dfs})序上第(i)个点的标号

    结论1:对于一种有效的( ext{bfs})分段,其对应恰好一棵树

    证明:
    考虑构造,遍历段,我们得到若干({(l_i,r_i)}),表示目前还未确定的((l_i,r_i])(l_i)为确定的根)。
    然后考虑后面一段,在每个子树,需要保证(l_i+1)在该段内,否则不合法。
    这样我们构造了一棵树。

    推论1:对于一棵能通过( ext{bfs})分段构造出来的树,其与( ext{bfs})分段一一对应

    证明:
    根据结论1,我们仅需证明两个不同的分段,不会构成一棵相同的树
    这显然成立

    结论2:对于一种分段({(l_i,r_i)}),其有效,当且仅当满足( ext{(i)}dfs_{l_i}<dfs_{l_i+1}<cdots<dfs_{r_i})( ext{(ii)}dep_{pos_i}+1ge dep_{pos_{i+1}})

    证明:
    显然这是有效的必要性
    如果满足条件,则可以通过结论1的构造方式构造出一棵树

    树高显然等价于段数,考虑如何分段

    • 若不满足(dfs_i<dfs_{i+1})(即(dfs_i>dfs_{i+1})),则中间必定分一段,这样就满足了结论2中的( ext{(i)})
    • 若对于( ext{dfs})序上连续两个点(pos_i,pos_{i+1}),假设其在( ext{bfs})序中不连续(连续的情况在上面处理过了)。
      考虑若满足(pos_i+1<pos_{i+1}),则说明(dep_{pos_{i+1}}=dep_{pos_i}+1)
      proof:显然(dep_{pos_{i}}le dep_{pos_{i+1}}),若(pos_i)(pos_{i+1})深度相等,根据树的性质,必然满足(pos_{i+1}=pos_i+1),其连续与上面假设矛盾,得证。
      那么其必定满足([pos_{i},pos_{i+1}))中恰好某点为一段的末端点。

    根据结论2,上述已经严格约束了有效性
    为方便表示,令(s_i)表示(i)是否为某一段的末端点,那么将上述条件描述成

    • (dfs_i<dfs_{i+1}),则(s_{i}=1)
    • 若对于( ext{dfs})序上连续两个点(pos_i,pos_{i+1}),假设其在( ext{bfs})序中不连续
      (sumlimits_{i=pos_i}^{pos_{i+1}-1}s_i=1)

    在第一种情况中,钦定(i)的状态,期望答案+1
    在第二种情况中,则为钦定([pos_i,pos_{i+1}-1))中的所有点的(s)是确定的
    对于未钦定的位置,其(s_i)可以是(0/1),故答案+0.5

  • 相关阅读:
    Scala In 5 Years – My Prediction « GridGain – Real Time Big Data
    牛魔王珍满福拉面 北京团购网|京东团购
    Build WebKit On Windows 白果果白的专栏 博客频道 CSDN.NET
    fabulous
    Selenimu做爬虫 oscarxie 博客园
    EA gpl
    数据挖掘与Taco Bell编程
    test cpp could not compiled on ubuntu use g++,i'll tried lateor on win platform
    How to use ActiveRecord without Rails
    svn添加新项目管理并添加到trac 知识是一种越吃越饿的粮食 ITeye技术网站
  • 原文地址:https://www.cnblogs.com/Grice/p/14306160.html
Copyright © 2011-2022 走看看