zoukankan      html  css  js  c++  java
  • NOI2021 部分题解

    圆梦,个人认为题目难度:D1T1-D2T1-D1T2-D2T2-D1T3-D2T3。

    这届 NOI 往前五年以内最烂稳了,往后不知道有没有更烂的。——p_b_p_b

    D1T1 轻重边

    Solution 听说被喷了?不过个人认为还可以。

    首先如果直接按照轻重边的定义写的话,不大可能写的出结果。

    考虑转化问题,比如说,时间戳?

    为每个点打上一个时间戳,一条边被称为轻边,当且仅当两个点的时间戳不同。

    那么,操作一就可以变为一次树上路径覆盖,也就是覆盖为一个新的时间戳。

    操作二拍平到序列上,就是不同颜色段个数。

    初始化要在开始的时候对每个点打不同的时间戳,这样就可以使每条边都是轻边。

    直接树链剖分,用线段树维护一下,时间复杂度 (O(nlog^2n))

    D1T2 路径交点

    Solution $n_1=n_k$ 与 $n_1le 100$ 的限制,不由得想到矩阵乘法。

    事实上,本题的解法其实比较简单,考虑将邻接矩阵乘起来并求行列式。

    然后?没了。你问我为什么是对的,可以使用 LGV 引理证明。

    引理:交点的奇偶性可以对应排列的奇偶性,证明吗,不会。

    那么就可以直接丢到 LGV 引理上来证明了。

    时间复杂度 (O(n^3))

    D1T3 庆典

    Solution 发现同一个 SCC 中的点是互达的,也就是说,如果我能访问一个 SCC 中的任意一个点,则必然也可以访问其他这个 SCC 中的点。

    直接缩点,然后会缩出一个 DAG,随便选取一个 DAG 的生成树,其实选节点标号尽量大的是绝对对的。

    现在考虑询问,容易发现每次涉及到的点很少,直接建出虚树,这个虚树的点数会很少,我们直接在上面添加上加的边。

    如果,一个虚树上的点,既可以被起始点 (s_i) 到达,又可以在虚树的反树上被终止点 (t_i) 到达,则这个点被称为好点。

    如果一条边的两边均是好点,那么这条边上的点都是好点。

    最终的答案即为好点的权值和,时间复杂度 (O(nlog n+qlog n+sum klog n))

    注意本题的实现上需要卡常,建议不要使用倍增 LCA,如果你倍增 LCA 卡过去了那我请你抽烟。

    D2T1 量子通信

    Solution 容易发现字典是随机的,同时一共是 $256$ 位,最大混淆值只有 $15$。

    (256) 位的 (01) 串分段成 (16) 段,如果一个串被混淆了,那么这 (16) 段至少有一段不变,找出这一段不变的,对于这一段找出字典中的串,暴力对比即可。

    好像挺一句话的,不过就这样。

    D2T2 密码箱

    Solution

    公式其实无约分的必要,所以直接考虑分别计算分子和分母,考虑使用矩阵维护。

    所以考虑矩阵刻画操作,比如说思考加上一个 (a_i) 有什么影响。

    [frac{a'}{b'}=frac{1}{a_i+frac a b}=frac{b}{a_i imes b+a} ]

    也就是说 (a'=b)(b'=a_i imes b+a)

    也就是:

    [egin{bmatrix} a' \ b' end{bmatrix} = egin{bmatrix}0 & 1 \1& a_i end{bmatrix} egin{bmatrix} a \ b end{bmatrix} ]

    那么我们就可以用矩阵刻画求答案了,考虑刻画 WE 操作。

    W 操作:(a_k o a_k+1):考虑构造一个矩阵 (A) 使得 (egin{bmatrix}0 & 1 \1& a_k end{bmatrix}A=egin{bmatrix}0 & 1 \1& a_k+1 end{bmatrix})

    不难构造出 (A=egin{bmatrix}1 & 1 \0& 1 end{bmatrix})

    之后是 E 操作,要分 (a_k>1)(a_k=1) 两种情况。

    只讨论 (a_k>1) 的情况,类上,构造出给末位减一的矩阵 (egin{bmatrix}1 & -1 \0& 1 end{bmatrix})

    再进行添加,添加两个 (egin{bmatrix}0 & 1 \1& 1end{bmatrix}),乘起来得 (egin{bmatrix}0 & -1 \1& 2end{bmatrix})

    猜测另一种情况也是一样的,验证出也是一样的。

    那么直接维护矩阵连乘积,矩阵反转积,矩阵翻转积,矩阵翻转反转积。

    直接 FHQ 硬上,时间复杂度 (O(qlog n))

    卡常小 trick:循环展开矩阵乘法。

  • 相关阅读:
    Web开发细节搜集
    excel设置单元格为文本
    网页QQ唤起
    .net提高文章
    代码重构学习
    js的undefined怎么判断
    微软.net一些类的源码
    FineMessBox的js依赖导致错误Uncaught ReferenceError: addEvent is not defined
    [译转]深入理解LayoutInflater.inflate()
    java 和 Android Base64加密
  • 原文地址:https://www.cnblogs.com/lajiccf/p/15411465.html
Copyright © 2011-2022 走看看