zoukankan      html  css  js  c++  java
  • IIIDX新理解

    根据题意,我们考虑从小到大枚举树上每个节点,并且让它的值最小。
    一组已经确定的值的序列,序列上的每个点都会要求它的子树的值大于等于它。
    已经确定的值已经满足条件,所以只需要考虑未被确定的值的限制,也就是要求若干子树(若干dfs序连续段)的值(leq 某个数)
    考虑使用二分图完美匹配。
    把每个数从大到小排序,并且删除已经被选择的数。
    这样子每个点会向一个后缀连边,可以判定二分图完美匹配。
    时间复杂度(O(n^5))
    然而出题人并没给这个部分分。
    考虑hall定理。容易发现这么两个引理。
    引理1:把所有点连向的后缀按照长度从小到大排序,钦定长度相同的点一起选可以正确的判定。
    引理2:如果选择了长度为(l)的后缀,则同时选择长度(leq l)的后缀判定答案不变。
    可以直接按照这两个引理判定,一次时间复杂度(O(n)),总时间复杂度(O(n^3))
    发现可以二分,时间复杂度降低到(O(n^2log_2n))
    实际上,每个限制后缀(设长度为(l))都要求长度比它小的前缀的权值和>l。
    移项可以得到限制和(-)比他小的前缀的权值和(>0)
    我们需要一个数据结构支持快速查找([1...x])权值(>0)的前缀的长度最大值,插入/删除一个限制。
    这可以使用线段树/平衡树维护。
    线段树上下标为(l)的位置初始为(l),每一次对一个后缀减去某个值,或者查询从前往后第一个权值(>0)的前缀。
    第一个操作可以打标记,第二个操作可以线段树上二分。

  • 相关阅读:
    【创建图像映射】
    【用图像代替文本作为超链接】
    【设置图像的提示文字】
    【设置图像的替换文字】
    【小玩意儿:在页面上设置链接发送E-mail】
    【锚点】
    【绝对路径/相对路径】
    【安装IDEA】
    【加法计算器】
    【Unlock xcode files?】
  • 原文地址:https://www.cnblogs.com/ctmlpfs/p/14542683.html
Copyright © 2011-2022 走看看