zoukankan      html  css  js  c++  java
  • 2016-5-30模拟测试

    • T1

      • description
        给一棵(n(leqslant 100000))个节点的树,每个节点的种类两两不同,要求支持一下几个操作:
        1.将这个点到根的路径变成一种新的点
        2.询问以这个点为根的子树中的点到根的所有路径,对于每一条路径,贡献为这条路径上不同的点的个数。
        3.换根
      • solution
        可以发现这些都是LCT的操作,将虚边设为1,实边设为0,则只需要问子树内所有点到根的权值和就行了,而这个在(access)的过程中配合线段树的子树修改即可。
      • notice
        在配合线段树进行子树修改的时候,往往需要知道一个点在另一个点的哪棵子树中,这可以用倍增或者链剖处理,LCT处理起来就更方便了,并且我们可以以直接知道这些点和根的位置关系,讨论一下就行了(注意讨论的严谨性)。
    • T2

      • description
        对于(forall 1 leqslant k leqslant n)(1,2,3...n)的所有错排中含有长度为(k)的环(令(i)(a_i)连边)的排列的数量。
      • solution
        枚举循环节长度,以及至少有几个循环节,容斥计算即可,还要套个错排公式。
    • T3

      • description
        给一个序列(a_1,a_2,...a_n),若(i<j且a_i>a_j)(i,j)之间有一条边,求即是独立集又是支配集的集合的数量。
      • solution
        独立集:上升序列
        支配集+独立集:设(f_i)为前(i)个数选了(i)的方案数,对于(f_i)可以更新(f_j)的需满足对于(forall i < k < j,a_i < a_k < a_j),复杂度(O(n^2)).
        我考场上记了一个已选的最大的和未选的最小的,本来是(O(n^3))的但是必须满足最大的小于最小的,就会有很多无用状态,拿map进行转移就通过了所有的测试点。
  • 相关阅读:
    Python元组、列表、字典
    测试通过Word直接发布博文
    Python环境搭建(windows)
    hdu 4003 Find Metal Mineral 树形DP
    poj 1986 Distance Queries LCA
    poj 1470 Closest Common Ancestors LCA
    poj 1330 Nearest Common Ancestors LCA
    hdu 3046 Pleasant sheep and big big wolf 最小割
    poj 3281 Dining 最大流
    zoj 2760 How Many Shortest Path 最大流
  • 原文地址:https://www.cnblogs.com/showson/p/5544165.html
Copyright © 2011-2022 走看看