• NOI 2021 部分题目题解


    最近几天复盘了一下NOI 2021,愈发发觉自己的愚蠢,可惜D2T3仍是不会,于是只写前面的题解

    Day1 T1

    可以发现,每次相当于将 (x o y) 染上一种全新颜色,然后一条边是重边当且仅当两端有颜色且相同,于是就可以使用树链剖分维护了。

    复杂度 (Theta(nlog^2n))

    Day1 T2

    可以发现,当 (n_i) 都相同的是,答案就是邻接矩阵行列式的积,也即是邻接矩阵积的行列式。

    拓展发现,(n_i) 不同的时候依旧适用,不过不会证明。

    Day1 T3

    首先可以发现,在缩点之后一定存在一种树形结构使得不改变连通性,因为假设存在 (z o x,y o x,z o y),那么 (z o x) 是不需要的。所以在构造树的时候可以选一个入度为 (0) 的点开始,然后每次儿子从 scc 序大的开始。

    假设已经建好了树,可以发现 (k=0) 时有解的话就是 (x o y) 上链上点的大小之和,(k=1) 的话需要分类讨论,(k) 更大时显然分类讨论不是很好搞。

    发现假设我们定义“好点”为新增边的端点中既能从 (s) 到达又能到 (t) 的点(合法情况下包括 (s,t)),那么一个点合法当且仅当祖先中有“好点”,子树中有“好点”。

    那我们就可以建出虚树,然后算贡献了。(然而似乎可以不用建出虚树)。

    Day2 T1

    不难发现分成 (16) 段的话,如果有解那么解的方案一定有一段完全相同,然后你发现随机情况下一段最多有 (7) 个左右,暴力判就好了。算差异的话可以用 __builtin_popcount (Theta(1)) 计算。

    Day 2 T2

    首先可以看出并不需要除以 (gcd)

    可以发现如果 (a_i) 是确定的,那么:

    [egin{bmatrix} a_i & 1\ 1 & 0 end{bmatrix}]

    从右往左算的积的 ((0,0)) 位和 ((0,1)) 位就是答案。

    考虑 W 操作的影响,你发现:

    [egin{bmatrix} 1 & 1\ 0 & 1\ end{bmatrix} imes egin{bmatrix} a_i & 1\ 1 & 0 end{bmatrix} = egin{bmatrix} a_i+1 & 1\ 1 & 0 end{bmatrix} ]

    所以就相当于在后面增加一个

    [egin{bmatrix} 1 & 1\ 0 & 1 end{bmatrix} ]

    的矩阵。

    考虑 E 操作,不难发现两种情况其实操作下来等价,所以我们只需要考虑第二种情况。实际上就是增加:

    [egin{bmatrix} 1 & 1\ 1 & 0 end{bmatrix} egin{bmatrix} 1 & 1\ 1 & 0 end{bmatrix} egin{bmatrix} 1 & -1\ 0 & 1 end{bmatrix} ]

    又因为矩阵有结合律,所以就相当于增加:

    [egin{bmatrix} 2 & -1\ 1 & 0 end{bmatrix} ]

    所以用平衡树维护就好了。需要卡常的话可以把矩阵乘法那里手写而非循环形式。

  • 相关阅读:
    Appium元素定位方式
    Selenium和Appium的关系
    再生龙备份恢复
    删除CentOS更新后的旧内核
    文字识别网站https://ocr.space/
    kubeasz部署高可用kubernetes1.17.2 并实现traefik2.1.2部署 亲测可用
    docker之Dockerfile实践用dockerfile构建nginx环境
    WordPress如何设置先登录再进入主页
    docker 容器使用 systemctl 命令是报错
    bilibili
  • 原文地址:https://www.cnblogs.com/Dark-Romance/p/15113230.html
Copyright © 2020-2023  润新知