YAIU 非官方营业日志(1、2、3)

P6383 『MdOI R2』Resurrection

题面:

有一棵包含 个节点的树 ,它的所有边依次编号为

保证对于 中任意一个节点 ,从 号节点的简单路径都不经过任何编号小于 的节点。

按照如下步骤生成一张包含 个节点的无向图

选取一个 的排列 ,然后依次进行 次操作。在进行第 次操作时,首先删除树 中编号为 的边 ,然后,记 分别为当前树 中与 联通的所有点中,编号最大的点,并在图 号点和 号点之间连一条边。

求对于给定的树 ,按上述方式一共可以生成多少种本质不同的图 。图 本质不同当且仅当存在 满足在 中不存在边 ,而 中存在。

因为答案可能很大,你只需要求出答案对 取模的值。

题解:

删去边 时(不妨设 ),连的那条边,必然以 为其端点之一;这条边,只能向其祖先连过去。

考虑链的情况,玩一下,发现图应该长如下这样:

也就是不能相交。证明的话,如果有相交的,显然无解;如果没有相交的,我们直接递归构造。搬到树上也一样的,我们只要数这种连边方式的数量。

那么怎么数呢?树形 dp 有一个惯性是,设 表示 子树内,对上方节点的后效性为 的方案数;在这题中,这个 需要存下向上所有的连边方案,这是行不通的。

我们反过来记录,记下上面对下面的影响。具体来说,我们记 表示,如果上方还有 个点可选(没有被已有的线挡住), 子树内的方案数。那么就很可做了,得到状态转移方程:

AC Submision Click Here!

CF1592F2 Alice and Recoloring 2

题面:

有一个 01 矩阵和四种操作:

  1. 对包含 的一个子矩形作区间翻转,代价为
  2. 对包含 的一个子矩形作区间翻转,代价为
  3. 对包含 的一个子矩形作区间翻转,代价为
  4. 对包含 的一个子矩形作区间翻转,代价为

问把一个全 矩阵转换成一个给定矩阵的最小代价。

题解:

首先我们发现第三、四种操作没有任何作用,都可以换成两个一操作。对原平面做一次二维差分(以 为原点),那么一操作就是一次单点翻转,二操作就是一次四点翻转。

这时一个重要结论是,每一行/列最多被进行一次二操作。否则就会有一半的单点修改没有用,可以直接用一操作来替代,代价不升。一次二操作,只有当 时,才会对答案起到减一的作用。对于每个满足这个条件的 ,从行 连一条边向 。直接跑二分图最大匹配即可。

的影响怎么处理?由于一的代价恰好可以忽略/抵消,我们直接不管它,最后单独判一下即可。AC Submision Click Here!

P5332 [JSOI2019]精准预测

题面:

目前,火星小镇上有 个居民(编号 )。机器学习算法预测出这些居民在接下来 个时刻(编号)的生死情况,每条预测都是如下两种形式之一:

对于每个人,计算出有多少个人有可能和它一起活到 时刻。,预测条数

题解:

对于每个人的每个有效时刻建出两个虚点,显然可以建出一颗 2-SAT。(这里插一句,对于一个限制 别忘了 把 连上,因为这个事调了我好久啊啊啊啊啊)。

那么容易想到的一个结论是, 可以共存,当且仅当 。前两个条件是保证两个分别有解;第三个条件是保证能共存。直接 bitset 传递闭包即可,

为了空间限制,要分成多个部分分别传递闭包,时间复杂度大体不变;每个点不需要建出其第 时刻。这样就能卡过去了:AC Submision Click Here!

CF932F Escape Through Leaf

题面:

有一颗 个节点的树(节点从 依次编号)。每个节点有两个权值,第 个节点的权值为

你可以从一个节点跳到它的子树内任意一个节点上。从节点 跳到节点 一次的花费为 。跳跃多次走过一条路径的总费用为每次跳跃的费用之和。请分别计算出每个节点到达树的每个叶子节点的费用中的最小值。

注意:就算树的深度为 ,根节点也不算做叶子节点。另外,不能从一个节点跳到它自己.

题解:

从一个 的点向 的子树跳,到根的最小代价是一个关于 的一个一次函数构成的下凸壳。我们要做的就是动态维护半平面交合并和单点插入。我们直接李超树合并,复杂度是 的;因为每条直线只会从根一路传递到叶子,均摊一下复杂度就是 的了。AC Submision Click Here!

P5334 [JSOI2019]节日庆典

题面:

对于字符串,定义

其中 是字符串的拼接操作。定义 为最小的 )满足 (字典序意义下)。

JYY希望你帮助他设计一个算法,让火星人每个节目的气球排列都最美观,即对于给定字符串 的每一个前缀),求出

题解:

感觉是一个比较典型的字符串的推导过程。

我们从左到右依次考虑,设 的答案候选集合为 。将其从小到大排序,由最小性得 的一个 Border;如何使限制更加严格呢?设 ,大概会长下面这个样子:

其中, 的一个 Border,也是候选集和中的一个元素;容易发现,ABX 一定不会比 AABXBX 都优秀,那么这个 ABX 就没有用了。加上这个剪枝,候选集合的大小就是 级别的了。

维护候选集合直接从左到右暴力地做就好了;那么如何从候选集合中找到答案呢?这就需要快速比较字典序了。由于循环位移比较字典序中需要比的串对中,至少得有一个是前缀,所以可以用 exKMP,求出每个后缀与全串的 lcp,就能 比较字典序啦!AC Submision Click Here!

P5597 [XR-4]复读

题意:

小 X 捡到了一台复读机,这台复读机可以向机器人发号施令。机器人将站在一棵完全二叉树的根上,完全二叉树是无限延伸的。你将向复读机录入一串指令,这串指令单个字符可以是:

录入指令后,复读机将会把指令无限复读下去。比如命令为 LR,那么机器人会遵从 LRLRLRLR... 一直走下去。

这棵完全二叉树上有一个 个节点的连通块,保证这个连通块包含根节点。连通块上的每个节点都埋有宝藏,机器人到达过的地方如果有宝藏,则会将其开采。如果一个地方没有宝藏,机器人也可以到那里去。机器人也可以反复经过一个地方。

显然,这个连通块本身也是一棵二叉树。

现在,有人告诉了小 X 埋有宝藏的这棵二叉树的前序遍历,小 X 需要寻找到一条尽量短的指令,使得机器人能够挖掘出所有宝藏。

题解:

枚举一个周期的位移矢量,然后会把原树分成很多段,求个并即可。没什么好解释的,就是码就好了。AC Submision Click Here!

P3293 [SCOI2016]美味

题面:

一家餐厅有 道菜,编号 ,大家对第 道菜的评价值为 。有 位顾客,第 位顾客的期望值为 ,而他的偏好值为 。因此,第 位顾客认为第 道菜的美味度为 表示异或运算。

位顾客希望从这些菜中挑出他认为最美味的菜,即美味值最大的菜,但由于价格等因素,他只能从第 道到第 道中选择。请你帮助他们找出最美味的菜。

题解:

我们建出可持久化值域线段树,用于查询一个区间内是否存在值域在某个范围内的数。然后我们从高到低位考虑,每次查的都是一个区间,逐渐缩小范围,直到确定这个数。AC Submision Click Here!

P4898 [IOI2018] seats 排座位

题面:

你要在一个长方形大厅里举办国际编程比赛,该大厅共有 个座位( 列)。行的编号是从 ,列的编号是从 。位于 列的座位用 表示。一共邀请了 位参赛者,编号是从 。你制定好了一个座位表,第 个参赛者被安排到座位 。座位表中参赛者和座位是一一对应的。

大厅中一个座位集合 被称为是长方形的,如果存在整数 满足下列条件:

如果一个长方形座位集合包含 个座位,并且被分配到这个集合的参赛者的编号恰好是从 ,那么该集合是美妙的。一个座位表的美妙度定义为这个表中美妙的长方形座位集合的个数。

在准备好座位表后,你会收到一些交换两个参赛者座位的请求。具体来说,有 个这样的请求,按时间顺序编号为 。第 个请求希望交换参赛者 的座位。你立即接受每个请求并更新座位表。每次更新后,你的目标是计算当前座位表的美妙度。

题解:

Chen_03 的循循善诱下做出了这道题。

先考虑只有一列的情况。我们肯定是要对人的编号为下标的序列维护一个什么东西,这个东西能够判定是否连通且能方便地求和。设 为第 个人的位置,那么我们判断 能构成美妙集合当且仅当:

我们建一个以人的编号为下标的线段树,维护每个 ;考虑插入一个数作为 的贡献,那么它对应着一个区间加。统计最小值个数即可。

二维情况怎么办?如下:

我们直接统计 的数量和 的数量; 必须一个都没有,权值设为 必须有恰好 个,权值设为 ,直接维护一个编号上的线段树即可。