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)的前缀。
    第一个操作可以打标记,第二个操作可以线段树上二分。

  • 相关阅读:
    python同时继承多个类且方法相同
    django扩展用户继承AbstractUser
    python中单下划线和双下划线
    django扩展用户一对一关联
    django拓展用户proxy代理
    django 内置User对象基本使用
    selenium+pthon之二----了解浏览器的相关操作方法
    最近很燥,决心沉下心来学习!
    selenium+pthon之一----环境搭建与脚本实例
    Fiddler入门三
  • 原文地址:https://www.cnblogs.com/ctmlpfs/p/14542683.html
Copyright © 2011-2022 走看看