zoukankan      html  css  js  c++  java
  • 模拟110 题解

    A. 最大或

    因为或运算特殊的性质,从高位到低位进行贪心。

    将$l$,$r$的二进制位分别取出,

    从高到低枚举每一位,

    当存在一个二进制位不同,即在此位$l$为$0$而$r$为$1$。

    那么$x$可以选择后面每个二进制位中的$1$,保证低位贡献的最大化,$y$只要保证高位的贡献就可以了。

    B. 答题

    暴力做这道题比较简单,

    然后发现数据范围显然是在提示$meet in the middle$。

    所以二分答案+单调指针扫就可以了。

    C. 联合权值·改

    本题中要用到的一个结论,图中出现的三元环个数不超过$m^{1.5}$。

    以下是证明:

    考虑任何一个三元环$(a,b,c)$,可以按照一种顺序唯一表示。

    查找三元环的方法是:一层循环枚举$a$,二层循环枚举$a$的出边$b$,三层循环枚举$b$的出边$c$,之后判断$a$,$c$之间是否有边。

    然而暴力按照编号的顺序做的复杂度还是不正确的。

    正确的方法是按照度数从大到小找。

    可以发现,

    1.对于度数大于$sqrt m$的点,只有不超过$sqrt m$个,

    对于每个点,设度数为$k$,那么这个点被拓展为中间点的次数不超过$frac{m}{k}$次,能拓展到的点不超过$k$个,

    单个点的复杂度不超过$O(m)$,故其总复杂度为$O(m*sqrt m)$。

    2.对于度数小于$sqrt m$的点,

    所有的点总共会被拓展为中间点不超过$m$次,其中每个点能拓展到的点不超过$sqrt m$个。

    故其总复杂度为$O(m*sqrt m)$。

    由上述,在本题中三元环的个数是可以枚举的。

    有了这个结论,可以直接暴力做这道题。

    对于最大值,

    外层枚举中间点,将所有的出边到达的点按点权排序,两层循环接着枚举,

    因为点权从大到小排序,可以在找到一组答案后直接跳出循环。

    因为没有找到一组答案仅当遇到三元环,而三元环个数是合法的,所以总复杂度也是合法的。

    对于权值和,

    外层枚举中间点,之后可以直接统计贡献。

    算重的贡献仅有三元环和同一个点。

    对于后一个贡献直接减掉,前一个贡献在找三元环的过程中减掉就可以了。

  • 相关阅读:
    c# 基础连接已经关闭: 连接被意外关闭,错误的解决
    关于SSIS中代码页(Code Page) 相关错误
    WinAPI: CopyFileEx
    RegularExpressions(5) RegularExpressions 成员(二) IRegex
    RegularExpressions(4) RegularExpressions 成员(一)
    RegularExpressions(3) RegularExpressions 的工作思路
    一句话复制整个文件夹(当然包括嵌套文件夹) 回复 "张哆哆" 的问题
    有趣的 TBitBtn.Kind
    如何用 GDI+ 高质量地缩放图片 回复 "程序牛" 的问题
    如何用 GDI 绘制阴影文字 回复 "Splendour" 的问题
  • 原文地址:https://www.cnblogs.com/skyh/p/11837918.html
Copyright © 2011-2022 走看看