ZR提高失恋测2(9.7)

网址http://www.zhengruioi.com/contest/392

版权原因,不放题面

A

首先,我们发现对于匹配串\(s\)中所有满足\(s_i \not = s_{i + 1}\)的\(i\)

那么\(i\)和\(i + 1\)之中至少要一个点被匹配,这应该是比较显然的

如果不这样肯定不满足条件

我们首先考虑暴力匹配,能匹配就匹配,这样可以得到一组字典序最小的解法

但是,这样直接填出来的答案很可能是不对的

考虑怎么把它给变对

这样就要用到开头所说的东西

我们从后向前去枚举满足\(s_i \not = s_{i + 1}\)的\(i\)

这两个位置肯定是要被覆盖一个的

我们就看看我们当前匹配的最后一个是\(0\)还是\(1\),放到对应的位置上

如果枚举的过程中遇到了已经匹配到的点,说明我们存在一种方式把前面和后面接起来

但到最后我们发现无论怎样也无法碰到匹配的点,说明无解

代码

B

感谢xtq大佬的耐心讲解Orz

首先我们考虑一个比较naive的做法

二分答案,拆点,一个点拆成\(2 \times mid\)个点

第\((0/1,i,j)\)个点表示能否在连续经过\(j\)条颜色为\(0/1\)的边之后到达\(i\)点

直接建图bfs判断连通性即可

时间复杂度为\(\Theta(n^2log n)\)

我们考虑怎么优化这个东西,一个比较直接的思路是倍增优化建图

这样加上二分的时间复杂度为\(\Theta(nlog^2 n)\)

但是由于超大常数+我不会写无法通过100%的数据

考虑如何去优化这一个过程

我们看看我们暴力在干嘛

就是寻找所有在\(mid\)对应颜色步数范围内找到所有能走到的点,并且尝试变换颜色

上面的算法之所以慢,是因为点数有点多,同一个点因为状态不同可能会被遍历多次

这显然有些浪费

因为我们只关心不同颜色的边之间的转移,相同颜色的边我们只关心能否在范围内到达.

由于每个点都存在唯一后继

所以我们用并查集维护从当前点向后跳相同颜色的边跳到第一个未被访问的点的前一个点

之后由于还要维护步数来确定mid的限制,所以我们要使用带权并查集

我们每次都暴力去跳到当前的根的下一个节点然后判断步数,之后尝试把这个点的相反颜色入队.

每个点只能由相反颜色扩展过来,并且只会入队一次.

但是很可能会有环

我们发现我们尝试跳一步到达的集合的根就是他自己,说明我们跳完了环,直接退出循环就好了

代码

C

谢谢smy不厌烦的指导我才A掉了这道题目,我永远喜欢smy

神仙常数题

首先,由于\(w <= 10^6\)任何权值的不同的质因子的个数不会超过\(7\)

之后发现我们直接找最小满足条件的\(l\)比较难,我们寻找最大的不满足条件的\(l'\)

那么则有\(l = l' + 1\)

也就是说我们现在问题转化成了找到最长的经过\((u,v)\)的gcd不为\(1\)的路径

这东西貌似也不大好直接求

我们设\((u,v)\)之间的gcd为\(g\)(这一部分可以通过倍增得出)

存在
\[
g = p_1^{k_1}\times p_2^{k_2}\times \dots p_n^{k_n}
\]
我们想,一条经过$(u, v) $ 路径 \(gcd\) 不为 \(1\),必须要满足他至少存在一个相同的素因子

所以我们便有了一个想法,对于每个质因子,我们只考虑所有整除这个质因子的边

然后我们可以得到一颗森林,对这个森林跑一边树形DP

设\(d_{i, j}\)表示点\(i\)在只考虑第\(j\)个素因子的贡献时,最大向下的延伸长度

设\(d'_{i,j}\)表示点\(i\)在只考虑第\(j\)个素因子的贡献时,最大向父亲的延伸长度

则两个的必要性应该比较明显

我们还要设\(d''_{i,j}\)表示点\(i\)在只考虑第\(j\)个素因子时,次大向下延伸长度(不能和最大存在于同一个子树中)

这三个的必要性下面都会讲

最回到\((u,v)\)

我们发现有贡献的只有\(g\)的质因子(\(g\)的定义见上面)

我们就枚举它的所有质因子,然后这个\(l'\)就是每个质因子的贡献的\(max\)

考虑一个质因子\(p\)

我们考虑两种情况

\(1\):\((u,v)\)不是祖孙关系

也就是这个样子

(有点丑不要介意)

很明显我们只能在\((u,v )\)的子树中寻找答案

也会是\(d_{u,p} + d_{v,p}\)

这种情况比较简单

\(2\) \(u\)和\(v\)存在祖孙关系,我们假设\(u\)是\(v\)的祖先

这时候我们就不能像上面那样直接算子树内的,因为他可能出现这种情况

这就是最长路径的贡献来自同一子树

这也就是我们要记录\(d'\)和\(d''\)的原因

首先分析\(d_{v.p}\)肯有贡献

\(u\)的贡献实质上是扣去\(v\)所在的\(u\)的子树剩下的部分的最大值

也就是\(\max(d'_{u,p},x)\)

其中\(x\)的贡献是,如果\(u\)的最长链的贡献与\(v\)在同一子树,就是次长链的贡献,负责就是最长链的贡献,

将两部分贡献合并就是总贡献

另外无解怎么判断

如果经过\((u,v)\)的最长路径正好等于\(l'\),肯定无解

另外\(dp\)的时候由于每条边最多只会被计算\(7\)次贡献,所以\(dp\)数组开\(map\)就可以避免MLE

另外要将素因子放到第二维去维护,可以大大减少log的常数

代码

ZR提高失恋测2(9.7)的更多相关文章

  1. ZR提高失恋测4

    ZR提高失恋测4 比赛链接 A (方便讨论,设读入的串为\(S,T\)答案串为\(A\)) 首先\(*\)只会有一个 这是这道题目中非常重要的一个结论 简单证明一下? 因为\(*\)可以代表所有的字符 ...

  2. ZR提高失恋测3

    ZR提高失恋测3 题目链接 (感觉这一场比以往的简单了一些) 估分 100 + 40 + 40 得分 100 + 60 + 40 ??? A 首先,我们能够想到一个比较简单的\(n^2\)做法, 枚举 ...

  3. ZROI CSP-S失恋测(1)

    传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "怎么大家一个暑假不见都变菜了啊."--蔡老板 A 考虑一个\(nk^2\)的dp,按\(w_i\)排序,则每个组 ...

  4. ZR 提高十连 DAY 4

    哇 这题目怎么一次比一次毒瘤 当然这次还好 有会做的题目. T1 一眼看上去 毒瘤!再看一眼 我真不想看了 扔了. T2 哇感觉能写 哇这不是 随便都有40分了么 二分?优化一下65到手了.然后剩下的 ...

  5. ZROI 提高十连测 Day1

    第一天的提高模拟测 考前特意睡了20min 还是歇菜了,果然自己菜是真实的. 题目质量海星 但是我都不会这是真的...题目由于是花钱买的这里就不放了 LINK:problem 熟悉我的人应该都知道账号 ...

  6. Java下好用的开源库推荐

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文想介绍下自己在Java下做开发使用到的一些开源的优秀编程库,会不定 ...

  7. 【科研论文】基于文件解析的飞行器模拟系统软件设计(应用W5300)

    摘要: 飞行器模拟系统是复杂飞行器研制和使用过程中的重要设备,它可以用来模拟真实飞行器的输入输出接口,产生与真实系统一致的模拟数据,从而有效避免因使用真实飞行器带来的高风险,极大提高地面测发控系统的研 ...

  8. NOIP2018游记(更新完毕)

    10.13 初赛 Day -1 考前 这一次的考场从暗♂德华兴改到了长沙市一中,一进去:我一看,考场在哪???这一中比长郡大了好多,而且连指示牌都没有,这时碰见了谢总,谢总告诉我们在第二教学楼.路上还 ...

  9. 完结篇OO总结

    目录 前言 一.第四单元两次架构设计 二.架构设计及OO方法理解的演进 三.测试理解与实践的演进 四.课程收获 五.改进建议 前言 持续了17周的OO终于走向了尾声,想想寒假的时候连类都不知道是什么, ...

随机推荐

  1. JS 里的数据类型转换

    JS的数据类型转换 一.js中的数据类型Js中的数据类型一共有六种,即number,string,boolean,underfine,null,object. 1.Number Number数据类型指 ...

  2. 洛谷 P2146 [NOI2015]软件包管理器 树链剖分

    目录 题面 题目链接 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 输出样例#1: 输入样例#2: 输出样例#2: 说明 说明 思路 AC代码 总结 题面 题目链接 P ...

  3. 找顺数【数位dp】

    输出1到n中含有6的数的个数. 样例输入 100 样例输出 19 找规律感觉好难想(好像是什么100以内有19个,200以内有19*2个,600以内115个,700以内214个...,1000以内有2 ...

  4. 个人总结OLinux上安装oracle11G Data Guard

    一.准备环境 1.swap要求 swap最好设置3G以上,如果安装过程中报swap不足,可参考: https://www.jianshu.com/p/46635a12c8d0 2.官网必须安装包列表: ...

  5. 《mysql必知必会》笔记3(插入、更新、删除、创建删除更新表、视图)

    十九:插入数据 1:insert语句用来将行插入数据表中,可以插入完整的行.行的一部分.插入多行.插入某些查询的结果. 2:不指定列名,可以这样插入: insert into customers va ...

  6. 2017 ACM/ICPC Asia Regional Shenyang Online:number number number hdu 6198【矩阵快速幂】

    Problem Description We define a sequence F: ⋅ F0=0,F1=1;⋅ Fn=Fn−1+Fn−2 (n≥2). Give you an integer k, ...

  7. c++第四次作业:继承

    继承与派生 基本概念和语法 概念 继承与派生是同一过程从不同角度看 保持已有的特性而构造新类的过程称为继承. 在已有类的基础上新增自己的特性而产生新类的过程为派生. 被继承的已有类称为基类(父类) 派 ...

  8. 【BootStrap】--具有增删改查功能的表格Demo

    [BootStrap]--具有增删改查功能的表格Demo 目录(?)[+] 前言 版本一 样式 代码 版本二 样式 代码 版本三 样式 代码 总结 前言 bootstrap的表格样式,有类似EasyU ...

  9. this 、静态变量

    /*作者:qingfeng日期:2017/2/18功能:this,静态变量(类变量)*/class Demo3_2{    public static void main(String args[]) ...

  10. DENSE_RANK(),允许并列名次、名次不间断,如122344456

    将score按ID分组排名:dense_rank() over(partition by id order by score desc) 将score不分组排名:dense_rank() over(o ...