zoukankan      html  css  js  c++  java
  • 省选模拟48 题解

    A. 事情的相似度

    问题是区间内最大的点对 $LCS$。

    容易发现 $LCS$ 其实就是两个前缀的终止节点的 $lca$ 的 $len$。

    考虑对每个 SAM 上节点搞一个 set 维护 endpos 集合。

    每次的操作就是合并两个集合,然后节点 $x$ 上 endpos 集合中两两可以形成 $LCS geq len_x$ 。

    容易发现有一些点对是没有必要的,所以使用启发式合并,在插入之前查前驱后继就可以处理出 $n log$ 级别的点对。

    然后离线询问整一个扫描线,数据结构维护答案就完事了。

    另一种做法也是搞一个扫描线,数据结构维护答案。

    对于 SAM 上每个节点就只需要维护最大的 endpos,然后发现这个玩意和 LCT 的 access 操作是一致的,所以复杂度是正确的。

    B. 跳蚤王国的宰相

    考虑一个暴力做法。

    dfs 下去当子树大小大于 $lfloor frac{n}{2} floor$ 的时候就不断删除最大的儿子子树。

    然后发现,对于一个节点,删边只有两种情况。

    其一是删除多条重心连接的边,其二是删除至多一条重心到当前节点的边。

    所以考虑首先找出重心,不断删除重心的子树直到剩余大小在删边之后会导致 $leq lfloor frac{n}{2} floor$。

    然后每次 dfs 下去,现在只要判断是否需要删除第二种情况的边。

    C. 蛐蛐国的修墙方案

    容易发现排列会形成若干个偶环。

    然后问题是给每个环分配两种方案。

    直接搜索的复杂度是 $n*2^{frac{n}{2}}$ 的。

    然后发现如果说对于这个环,自身能够形成匹配的括号序列,那么自身匹配上是不劣的。

    显然大小为 $2$ 的环可以匹配上,所以总复杂度降到 $n*2^{frac{n}{4}}$。

    因为数据比较水,所以写个 dfs 就可以过了。

  • 相关阅读:
    LocalDate/LocalDateTime与String的互相转换示例(附DateTimeFormatter详解)
    MyBatis中的JdbcType映射介绍
    mybatis的一些特殊符号标识(大于,小于,等于,不等于)
    c++多重继承
    tensorflow 一些好的blog链接和tensorflow gpu版本安装
    java中Arraylist复制方法
    java/python中的队列
    java中的函数参数
    linux命令
    python爬某个网站的图片
  • 原文地址:https://www.cnblogs.com/skyh/p/12513552.html
Copyright © 2011-2022 走看看