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

    A. 选择

    可以发现问题是$a$ $b$是否在一个边双里。

    因为没有强制在线,所以将难处理的删边转化为加边。

    对于一棵树上的加边操作,只要将两个点之间的路径上的点,添加到同一个边双集合里即可。

    因为边双的特殊性质,加上并查集的操作,这样只考虑树边的做法是正确的。

    具体的实现方法实际上通过并查集+暴力跳父亲就可以实现。

    但是因为考试时弱智了,用的树剖+线段树维护并查集。


    B. 划分序列

    对于权值为正数,合法条件为最小的组数<=k。

    对于权值为负数,合法条件为最大的组数>=k。

    对于权值任意,可以尝试理解一个结论:合法条件为最小组数<=k<=最大组数。

    将前缀和离散化,然后直接通过树状数组即可维护最小的组数和最大的组数。

    所以直接二分答案就可以了。

    C. 生成树求和

    实际上也与原题差不多了。

    生成树一题的做法是,将三种颜色的边,分别视为$1$,$x$,$y$。

    然后代入$n^2$组点值,二维插值可得系数,而所得$x^ay^b$项系数即选择了$a$条颜色二边,$b$条颜色三边,$n-1-a-b$条颜色一边的方案数。

    对于本题,显然可以按位处理。

    一个显然的做法是同样将三种边权看作三种颜色,同样用二维插值解决。

    但是一个更加优秀的做法是,因为本题的特殊性质(最终不关注具体的$a$,$b$),而只关注$a+2b$ $mod$ $3$的结果。

    也就是说我们要得到每个生成树方案的边权的加和。

    因为矩阵树求的是乘积,所以只要将这个边权放在指数上就行了。

    这样求得的多项式也变为了不到$2n$次,用一维插值就可以,总复杂度少一个$n$。

    D. 圆圈游戏

    因为一些特殊的原因,这次的分数又超过了300分。

    因为一些特殊的原因,这是一道原题,题解见省选模拟4

  • 相关阅读:
    Django之模板层
    Django之视图层
    Django路由系统
    Django request对象与ORM简介
    浏览器不能访问bing
    SQL问题:com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value
    IDEA用Maven创建SpringMVC项目和配置
    离线安装pyinstaller
    flink1.11-报错问题
    maven的pom文件报红
  • 原文地址:https://www.cnblogs.com/skyh/p/12257778.html
Copyright © 2011-2022 走看看