<span>模拟110 题解</span>

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)$。

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

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

对于最大值,

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

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

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

对于权值和,

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

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

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

全部评论

相关推荐

牛客279957775号:铁暗恋
点赞 评论 收藏
分享
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务