02 2024 档案
摘要:看这篇题解 对这篇题解做一些解释 首先看到这道题目,时间范围很大,所以我们先考虑如何对区间进行排序,但是你会发现无论是按照左端点排序还是按照右端点排序,都很难DP下去,所以我们只能对时间排序,然而时间非常大,要对时间进行排序,就必须要离散化(这里启发我们,不要太固定思维觉得大的时间无法排序),设离散
阅读全文
摘要:看这篇题解 update 2024.7.5 重新做了一遍题目,差一点做出这道题目了 我的想法是,先考虑所有村庄都要赔偿,然后考虑在哪些村庄安装基站可以得到最多的退款 但是这样显然也要知道最后一个基站建在哪里,但是我们显然不能再开一维表示最后一个基站建在哪里,所以只能认为最后一个基站就建在最后一个村庄
阅读全文
摘要:应用DFS序非常好的一道题目 首先考虑暴力如何做,我们先考虑删除的点 在 下方,那么就相当于移除 的子树,由于与子树有关,所以可以想到DFS序 设 表示DFS序中 第一次出现的位置, 表示DFS序中 第二次出现的位置 当\(x
阅读全文
摘要:比赛遇到这种题目不要惊慌,一般都是用贪心 由于是序列操作题目,我们没有太多的办法,不可能把所有的情况都列举出来,所以根据贪心一般都有一个操作的顺序 这里我们按照 单调递增地操作,循环到某个 时,我们考虑 对应的数是多少,如果 ,我们考虑如何将\
阅读全文
摘要:这道题目看官解就好了,但解释一下为什么当 时,只用考虑 的前驱和后继 当操作出 之后,如果不是考虑的前驱和后继,那么第二次操作一定不包括 ,而是原来序列就有的两对数,这个时候可以选择在第一次操作操作这两对数去考虑,不会丢失答案 update 2024.7.13 重
阅读全文
摘要:我就解释一下为什么蓝书P247的询问第 小数一定要限制值域并且每次都要 ,而不是不限制值域 其实就一次询问操作是问题不大的,但是如果是由多次询问并且整体二分的话,我们是需要将原来的序列 划分成 和 的,这样才能保证每一层的时间复杂度是\(O(nl
阅读全文
摘要:来解释一下许多细节和疑问 在简化问题考虑左下中,为什么按照横坐标从小到大排序就好了?不应该还要以纵坐标为第二关键字排序吗?不然有可能某次询问 的下面一个点 ( )还没有更新就轮到 了,这就无法统计了啊? 答:如果单独考虑左下
阅读全文
摘要:题目 题解 他这个的大致意思,我说一下,然后记得写一下代码 比如只考虑某个只有一个点的询问,在二维平面上查询区间 ,值为 我们扫描线扫描到 的时候,假设值为 , 时,值为 ,..., 时,值为 ,那么答
阅读全文
摘要:看这篇题解 遇到这种题目我们一般是考虑动态维护 但是发现动态维护很难,所以考虑静态维护,但是静态维护就要加上时间这一维,所以可以转化成三维偏序 也就是说,我们对三维偏序可以考虑CDQ分治,而现在题目只要求二维偏序,但是多了修改操作,像这种情况就可以把时间这一维度加上转换为三维偏序
阅读全文
摘要:具体的题解就看OI-wiki上面的就好了,但是对上面的题解做一些解释 题解首先说按照 排序,其实是按照 为第一关键字, 为第二关键字, 为第三关键字排序再离散化 为什么要这么做?我们来看一下CDQ分治的具体过程 当 和\(solve(mi
阅读全文
摘要:打卡代码有注释 update 2024.7.15 如果用树上直接统计做,那么就要用 表示已经/正在遍历过的子树长度为 的最短路径条数是多少,然后更新答案;注意在即将遍历下一棵子树的时候,我们要用这棵子树(当前的 )去更新 ,但不
阅读全文
摘要:这个解法就看看OI-wiki的解法就好了,用的是树上直接统计(代码就看洛谷提交的,有注释) 再解释一下这个代码。每一次进入dfs的时候,这个dfs代表的点是当前所选树的根节点,在之后,我们“删除”这个根节点会将树分成若干个连通块,我们再递归地对连通块进行操作。“删除”之所以打引号,是因为自始至终我们
阅读全文
摘要:这个看OI-wiki就好了,写的很清楚 讲一下OI-wiki上面代码的一些细节 首先是第 行到第 行的 的改变, 的改变顺序是无关紧要的,但是 一定要在 修改完后再改变,因为要用到真正的 的值来判断范围 其次
阅读全文
摘要:OI-wiki上面关于莫队的介绍都可以看一下(特别是算法模板),这里介绍一下莫队算法时间复杂度的证明,OI-wiki那个有点看不懂 接下来设序列总长度为 ,询问为 ,块长为 首先来看左端点移动总次数,设某个块的询问个数为 ,那么这个块内左端点移动的总长度为\(O
阅读全文
摘要:这道题目的思想非常新 首先我们按照比较传统的想法,考虑交换两个位置 和 能带来什么影响 然后这就是这道题目的精华所在了,我们考虑影响的时候,没有必要去精确每一个位置的两个信息(左边更大的数的个数和右边更小的数的个数)怎么样变化,而是只用考虑这一次交换会让答案增大多少(其实重新做这道题
阅读全文
摘要:这里肯定考虑每个点作为lca对答案的贡献 考虑点 ,所代表的区间长度为 ,那么其左右两个子树的叶子节点一定至少选一个,即贡献为$$p \times (2^{\lfloor \frac{l}{2} \rfloor}-1)\times (2^{\lceil \frac{l}{2} \rc
阅读全文
摘要:使用观察样例法,观察一下数据,发现可能是 证明这是下界,如果更少,我们假设列更多,那么根据鸽巢原理,至少有一列没有政府建的城市,那么这一列肯定不可能有城市重建 然后我们可以找到一种方案:\((1,1),(2,2),...,(n,n),(n,n+1),(n,n+2),...,(
阅读全文
摘要:这篇题解可以看看(洛谷第一篇) 讲下我的做法 首先发现对于最终的序列,任意两个数(设为 和 )之间一定不会存在一个比两个数都小的数被删除,不然的话,我们设 和 之间最小的数为 ,那么某个区间删除 的时候一定会同时把 或 的某一个数删除
阅读全文
摘要:小清新贪心 考虑 是如何组成的,不超过 的,在多重集中的最大的一个数 一定是要选择的,否则如果不选,那么对其他的一种合法的方案一定存在若干个数的和等于 ,然后把这些数替换为 就好了 update 2024.7.11 提供一种新做法,从高到低考虑\(
阅读全文
摘要:官解写挺好 首先对 从小到大排序 如果 ,那么显然无解 如果 此时考虑一组边,长度总和为 如果 包含在这组边里面,那么有一种构造方式如下 如果 不包含在任何一组这种边,那么我们一定要找到一组这
阅读全文
摘要:官解挺不错的,看官解就好了 感觉 是一个很神奇的数 update 2024.7.10 自己重新做的时候,其实已经将 是 的倍数的情况想出来了,因为一个很naive的想法就是四个四个为一组去抵消影响 但是对于 是 的倍数但是不是 的倍数的情况还是没有想出
阅读全文
摘要:我们发现每次操作二之后序列都会变成全 ,所以全 序列是一个非常特殊的序列,我们考虑从他开始的最大收益是多少 由于我们接下来只能实施操作一,所以我们可以发现,任意一个时刻我们都不可能有两个位置满足 ,可以反证,假设 ,那么对于\(j\
阅读全文
摘要:先来看一下官方解答 首先对任意一个操作序列,如果存在某次操作二排在相邻的操作一前面,那我们把这两次操作换成连续的两次操作一,得到的字符串显然不变 所以我们可以先一直进行操作一,然后在进行操作二,我们把一种操作序列记为 ,表示进行了 次操作一之后进行了 次操作二 我们接
阅读全文
摘要:看了一下数据范围就知道是区间DP 像这种选择区间的操作,我们一般都会猜一个结论:对区间 的某种操作序列,如果没有一次操作是覆盖了整个区间的,那么中间一定可以找到一个分段点(这样才可以进行区间DP的枚举分段点的经典转移) 实际上,这道题目也是有类似的性质的 然后放一下正式证明,有兴趣就
阅读全文
摘要:这道题目的暴力非常好想,我们考虑如何优化暴力 有一个思想可以记住,如果对当前轮,怪兽 没死,而且他的两个邻居都没死,那么下一轮 是肯定没必要检查的,也不会死 所以我们每一轮记录一下哪些怪兽死了,把其左右两个怪兽加入下一轮的检查队列就好了 因为我们现在想要优化时间复杂度,就说明每一轮不
阅读全文
摘要:这道题目,现在当思维题做就别去找规律了,想一下怎么通过数学手段(这里利用对称性)快速做出来 update 2024.7.9 可以看看这篇题解 我们一定要利用对称性简化问题的推导,无论是在推导层数还是在推导山峰和山谷的增量的时候,都只用折四分之一(也就是一个角)而不是四个角
阅读全文
摘要:小清新贪心题 我们直接考虑如何找出反例,假设我们已经知道了这个反例,那么为什么找不到呢?我们在尝试找的时候,肯定是依次找反例的每个字母,根据贪心,肯定是越往前找越好,而即使这个样子我们最后都无法匹配完这个反例 所以我们可以想出一个贪心算法:依次遍历每个字母,并用一个数组 记录某个小写字
阅读全文
摘要:这道题目很像分治,如果将下标序列 以 为关键字排序,排序之后的逆序列就是答案 我们学过的有关分治的排序方法:快速排序和归并排序。这里使用快速排序 这里看官方解答就好了,写的挺清楚的 然后官方解答还给了一个非随机算法,具体来说,就是先从左到右询问每个位置,如果是<,就一直询
阅读全文
摘要:这道题目打得我很郁闷。。为啥考试的时候明明想到算法了,只要在想深一点就可以解决问题了,但却没有这么做呢? 看到求最小最大,想到二分,然后没有什么好的判断方法,又想到了DP 设 表示前 个数,选择第 个数到第一种序列里面,满足题意的第一种序列的最小值,有很明显的转移 最后
阅读全文
摘要:很显然的按位考虑,按位考虑之后,求式就变成了 和 的每一位与 异或后相加减 对于大于 的位 (指 ),显然 只能为 对于之后的 ,我们按照数学归纳法证明贪心,假设我们已经考虑到了第 位,之前的答案有一个正负
阅读全文
摘要:先来看看官方题解的做法,他一反常态的没有在逆序对题目里面考虑每个位置的贡献,而是直接回到定义考虑每对数是否是逆序对 我们考虑原数列中任意的一组数 和 。如果最开始两个都不是逆序对,那么交换之后两个都是逆序对;如果最开始两个都是逆序对,那么交换之后两个都
阅读全文
摘要:这道题目为什么考场上没想出来。。。就是不太相信自己吧,而且有个技巧不太清楚。。哎 很明显的一点是各个种族是分开的,所以我们每个种族单独考虑就好了 假设对于一个种族,我们已经固定了分的组数为 了,那么肯定是“平均”分到每个组是最好的(这点没办法证明,但是我考场上就是想得这一点啊,要学会相信自己
阅读全文
摘要:这个题目的官方题解写的挺好的 写成这个样子我们就可以想到先把所有数都模一个 然后我们就要考虑怎么构造这个数列了,注意这都已经是E了,一般是不会再出现像前面几道题目的直接构造了,一般是要利用算法了 这里我们就考虑怎么样才能够构造出来类似的数列。对任意一种方案,我们把只有单个 的blo
阅读全文
摘要:这道题目的官方题解讲的就很好 但是这个构造方法确实比较好,我当时想到了排序+去重,但是最后判断的时候利用了贪心,对任何一个剩下的元素 ,最后如果他要参与贡献的话,这个众数必须是 中的一个数,而由于 从小到大排了序的,我们依次考虑的话,显然是每个 都选择
阅读全文
摘要:看了一下题解里面的方法,好像跟我一样的就只有一个 然而按照那篇题解的描述:乱七八糟的细节比较少,其实还是很多啊。。。这题的代码的话,有空就写一下吧 来讲一下做法,先建虚树,然后考虑每一条虚树边 同理,虚树边的两个端点在原树上一条路径,我们画出来 红色点是虚树上的两个端点 那么考虑这些黑色点,以及这些
阅读全文
摘要:一个很典型的虚树题,把虚树建好。注意虚树上任意一条边表示原树中两个点的路径,而且这个路径上是没有关键点的,而且还有一个更关键的性质,就是这条路径上的树枝中的任何一个点也不是关键点,这一点下面会用到,主要是确定虚树中边权的大小 那么最大最小的DP就跟求树的直径的DP非常像了,就不说了,主要是来看一下求
阅读全文
摘要:题目只出现了一些关键点,所以想到虚树,我们对关键点建立虚树,会发现对虚树上的一条边 ,在原图中 到 的路径只用最多选择一条就可以了,所以我们就发现,有效的边的个数就是虚树上的边,是 的 然后看一下 的范围,想到状态压缩,对每一个状态 ,枚
阅读全文
摘要:虚树这个东西看OI wiki就好了,虽然我并不是很会证明正确性 当建立虚树之后,祖孙关系是不会改变的,然后虚树上某两个点之间的路径,就相当于原图中这两个点之间的路径,只不过相当于被压缩了(相当于跳着走的) 这道题目我们令虚树上的边的边权为原图中两点之间路径所有边权的最小值 证明一下正确性: 对于虚树
阅读全文
摘要:这道题目比较简单,就是要记得,BST与一个单调不降的中序遍历序列是一一对应的,因为树的形态是定的,搞出来的中序遍历数组的每个位置所代表的树的节点的编号也是定的,只不过是权值不同而已,显然双射 然后再复习一下 个数,取值范围在 内的单调不降的数列的个数的求法 两种理解方法:将每
阅读全文
摘要:这道题目真的是。。。 赛时的时候想完全证明出来发现不行,其实根本不用,这种题目主打的就是一个感性理解,官方题解也没给出证明。。在这道题目卡了1h完大蛋,最后剩20min做D,然而D也只做了30min。。。 我们手玩几组样例就会发现,他是想要在任意本金经历了无论多少场( )输之后,下一场赢至
阅读全文
摘要:先写一下官方题解 首先原问题有一个很显然的解集:点集中任意两点不存在祖孙关系 所以我们令 表示以 为根的子树的点集的数目,这些点集中任意两点不存在祖孙关系 有 如果一个解集中有一个点是另一个点的祖先,我们画出图 那么这个点上面的点(包括这些点的分支)是肯定不能选择的,所以这个
阅读全文
摘要:比较简单的一道思维题目,毕竟只有800分 也是很典型的套路,首先讨论下界,发现每一个正方形最多影响两条对角线,所以可以发现答案的下界 然后观察下样例,我们模仿一下样例,按照官方题解的说法,就是 "side cells"指左下和右下的两个正方形 然后接下来,官方题解就说两个side cells是包含两
阅读全文
摘要:嗯,一道奇奇怪怪的性质题目。。。 发现性质之后就可以记忆化了然后就可以很容易估算复杂度了
阅读全文
摘要:这道题目还是看yxc的题解 这种划分序列的题目都可以像这种(也就是cats transport这道题目的思想)考虑序列去思考 这也启发我们,还可以用贪心去剪枝,又多了一条剪枝的方法(其实就是排除等效冗余,这也告诉我们排除等效冗余可以从贪心的角度想) 然后 和 数组单调可以用数
阅读全文
摘要:看yxc的题解 他启发我们,一定要有意识的做预处理! 对他预处理做一点说明,他的 是枚举 到 的每一个自然数的,从题目的意思来看,这个巴士站应该不是首发站,所以 最小为 然后每选一条线路就相当于把这条线路所包含的点在原序列中的数量全部减 ,所以
阅读全文
摘要:这道题目看看yxc的题解 遇到dfs题不要怕啊。。。能算时间复杂度的话完全可以先算一算的,这一道题目看起来很复杂但是完全可以算啊 然后无用操作凑步数这个记住 第二个剪枝是针对输出的,这启发我们一定要把题目读完,输出完全也可以拿来做剪枝 最后一个剪枝是可行性剪枝
阅读全文
摘要:这道题目能学的东西,能复习的东西还是挺多的 首先什么是 进制加法?就是把逢十进一变成了逢 进一(注意如果只是加法,只有两个加数,那么任何进制的进位最多就是 ,不会更高) 然后我们模仿人类的思维,从右往左进行搜索 但是我们要学习数独搜索的思想:遍历一定比递归快 所以我们每进入一
阅读全文
摘要:这道题目居然可以用搜索做我是确实没想到。。。 所以如果想不出来了,整体框架就套个搜索吧 这道题目如果要用搜索的话,那么肯定是要用迭代加深的,因为直接搜索一看就要爆炸的
阅读全文
摘要:蓝书上的题目只要求是否可以到达,但我们扩展一个东西:康拓展开(最基本的应用是求全排列的排名,一般的应用是哈希判重),然后来说明最小步数 那么BFS过程中的主要问题就是如何判重 一定要注意去掉已经填写了的数字 那么这道题目就可以利用康拓展开判重 注意这里的答案是正确的,因为我们是从 开始的排列
阅读全文
摘要:经典数论容斥,只不过这里从二维的变成了四维的 设 表示给出的序列中约数有 的数的个数 这里用到一个引理:一堆数的最大公约数一定是他们公约数的倍数 这个证明其实非常简单,从分解质因数的角度考虑,遍历一遍数列并且对质因数的个数取min,那么约数的集合肯定就是在这里面选,个数不能
阅读全文
摘要:我们看到双区间询问,可以想一下怎么转换成单区间询问 这个用容斥原理写也非常简单 指的是 和 指的是 会发现中间被多减了一次,所以加回来有 于是就转换成了单区间询问 题目没有对序列进行修改,所以可以离线处理所
阅读全文
摘要:二项式定理有两个性质,第一个是高中就接触过的,即奇数项(这里的奇数项与题目的奇数项定义不同)和偶数项系数之和相同 第二个也可以记住 阶乘分解质因数注意复习一下 这里拓展一个:$$\lfloor \frac{\lfloor\frac{n}{p}\rfloor}{q} \rfloor=\lfloor\f
阅读全文
摘要:我先说一下我自己的想法,我觉得是对的,但是没有OJ验证不了 我们考虑第一种颜色的棋子,先放他,假设放完后,这种棋子占用了 行 列(任意的 行 列,显然不影响答案),则这 行 列就不能放其他棋子了,棋盘就剩下了 行 列 如果我们已
阅读全文
摘要:一眼无穷嵌套DP 设 表示从 到 的期望 然后你会发现推不走,为什么?因为乘法对异或没有分配率! 但是不要怀疑我们的整体套路,我们应该从位运算的另一trick入手:考虑每一位 试想,如果我们列出了所有路径的样本空间(这当然是不可能的),知道了每个样本空间的xor和,乘以
阅读全文
摘要:这道题目是很明显的无穷嵌套DP,准备写出一堆方程后化简,又看到数据范围想到了状态压缩 设 表示手上已经有了 的卡片,集齐所有卡片的期望 这个时候我们不要去捣鼓一般性,而是选择直接手搓一个小范围数据,因为我们知道,一定是有规律的 不妨令 ,于是有(以下的状态都是二进制
阅读全文
摘要:这一道题目主要是要帮助我们养成容斥的思维 容斥主要是从集合的角度思考问题的,而且等式右边是奇加偶减,还是按照集合的大小从小到大依次考虑的 我们这里显然转化成不互质的个数(肯定不能用欧拉函数),于是把 分解质因数,然后再按照容斥原理考虑 先考虑集合大小为 的情况:即一个质数的倍数 我们
阅读全文
摘要:比较裸的分数规划,但是判断的时候,提醒一下,不用上DP,直接排序选取就好了
阅读全文
摘要:虽然我们知道,数学期望DP很多时候是要靠感性理解的 但是这道题目显然可以列出所有样本空间去考虑,在这种情况下我们就严谨一点 我们先设 表示前 个课程申请了 个课程的最小期望路径 我们先考虑第 个课程不申请,那么 个课程全部都申请到了前
阅读全文
摘要:这一道题目,我们不难想到用递推 把所有状态都给包含进去的话,就是设 表示前 个挑战,赢了 次,还剩 容量的概率 但是这样复杂度显然爆炸(注意第三维不止取到 ,因为可以继续获得背包容量),所以考虑压缩,我们发现 最大为\(200\
阅读全文
摘要:贝尔数板子题目 这个推导即考虑第 个元素所在集合的大小以及他与前面的哪些元素构成一个划分
阅读全文
摘要:第一类斯特林数板子题目,推倒可以像第二类类似推倒 第一类斯特林数的一些性质: \[\l
阅读全文
摘要:详细阐述一下蓝书的做法 首先,我们创造 个点,每个点有一个权值 ,也有一个编号 蓝书的连边就是对每一个点,从这个点出发连一条有向边到编号为这个点权值的点 比如书上举的那个例子,编号分别为 ,权值分别为 这样这个图肯定是由若
阅读全文
摘要:这道题目就是同余方程组 可以想一下为什么异或方程组,同余方程组都可以用高斯消元解 实际上,主要是满足以下条件:方程组①+②->方程组③,然后将③与①或②任意一个结合就可以推导出剩下的那一个,相当于变换之后的方程组是等价的 另外,这道题目交了很多页,把每个代码细节搞明白
阅读全文
摘要:这道题目一看数据范围就是把 当做向量长度, 当做向量变化时间(要有这个意识,当一个数据小于等于 的时候就要考虑矩阵快速幂了) 由于矩阵乘法当前时间必须由上一时间推导而来,所以我们要把式子变化一下, 的 必须要变成 ,也就是说要把
阅读全文
摘要:这是一道填充网格题目,根据我们的思路不难设出一个状态 我们要求的最终答案的第二维是 ,所以我们讨论 怎么出来 再依次顺着讨论下去 这里求解分类的时候,我们按照第 列有 个竖着放着的块来讨论 所以我们以后根本没必要去讨论所有情况,而是要求啥就算啥就行
阅读全文
摘要:这道题目就是广义矩阵乘法了,我们只考虑奇偶,所以用 表示元素就足够了 那我们假设现在有了当前的状态向量,长度为 ,表示第 个面包师当前横线的奇偶,我们考虑转移矩阵应该长成什么样子 对于下一个月,某个面包师横线的增量肯定由本月所有与其关联的面包师相关,那么无关的面包师无论是
阅读全文
摘要:首先这道题目如果用递推DP的话挺好想的,状态好想方程也好写,但提供一种新思路 这种思路跟KMOP也很像
阅读全文
摘要:这道题目看起来很像“sumdiv”这道题目,所以是可以用分治做的 但是这里是矩阵,所以我们用矩阵来做一下 我们之前的矩阵乘法都是数量是元素,现在是矩阵是元素了,不用慌,套用分块矩阵的思想就好了 当然如果我们是这么写的递推式: ,我们的转移矩阵就不是这么写的了,可以写
阅读全文
摘要:这道题目就是复习一下蓝书P159的常数项的处理方式并拓展一下 值得一提的是,这里如果把 当成一项好像是推不出来 所以以后遇到多项式了,把每一项单独作为一项而不要把多项式整体作为一项
阅读全文
摘要:这个就是见识一下,尽管状态看起来是二维的,但是仍然可以矩阵快速幂加速
阅读全文
摘要:这道题目还是非常简单的,只是提醒一点,以后遇到连等式了可以最后以一个未知数代替连等式的值然后同余
阅读全文
摘要:本来一开始觉得用欧拉函数不可取的,因为 太大了 所以我想到了质因数分解,只要找的数不含 的质因子即可 理想是美好的,但是现实是我没有办法确定每一个非 质因子的质因子的个数,因为我最后要保证所有质因子的乘积不会超过 所以我们只能再回到欧拉函数 我们稍微的套用一
阅读全文
摘要:主要是要记住欧拉函数迭代的次数,这是一个很重要的结论 类似题目:上帝与集合的正确用法 Ans update 2024.8.6 这道题目有一个很奇怪的东西 因为我们无法保证当 时,还有\(a^b\equiv a^{b\space \text{mod}\space φ(n)+φ(n)
阅读全文
摘要:主要是了解一下概念 位存储系统就是存储时一共有 个 位 如果 是无符号整数的话,可以很容易地列出来一个同余方程 事实上,如果 是有符号整数,同余方程也是不变的,why? 考虑程设基础有关数据溢出的那张圆饼图,有符号整数无非就是上面的数字有正有负,但是你从
阅读全文
摘要:这道题目非常简单,就是求 的解 但是这里要求 和 非负,又要 最小 如果没有前一个条件,我们把通解写出来为 ,取模就好了 有了前一个限制,我们也不要怕,只需要认认真真分类讨论就好了 我们先把\(x\
阅读全文
摘要:就是在复习一下,考虑贡献是非常重要的一个思想 这里考虑的贡献只枚举质数就好了
阅读全文
摘要:这道题目其实就是上面一道“超级英雄” 这里将属性作为左部,装备作为右部就好了 其实我最开始是没有想到的,因为我一直在想把某一个对象作为二分图的节点 这道题目就启发我们,其实不是非要把一个对象作为二分图的节点的,我们还可以把两个对象分别作为二分图的左右部来考虑(转换对象法) 另外这道题目的 非
阅读全文
摘要:这里主要是对蓝书上做法的补充 首先看到这道题目,我们假设已经知道要选哪些点了,那我们在原图 上每选一个点,与这个点有关的路径上的所有点都要被打上标记,打上标记的点就不能再选了,所以我们选的点就是每次都没有标记的点 像这种“与一点有关的所有路径的所有点”,可以通过传递闭包后转化为“与一点走一条
阅读全文
摘要:对任意一种路径覆盖,在二分图上选对应的边,肯定选出来的是一组匹配这就对应上去了 难的主要是将二分图对应到一种路径覆盖上面去 我们假设最开始把每个独立的点当做一条路径(即每个点既是起点也是终点),然后我们在二分图中每选一条边(注意是匹配边),就在DAG中选择对应的边,由于每次选择的是匹配边,所以在DA
阅读全文
摘要:这其实就是最小边覆盖 我们对任意一种选边的操作序列,显然每一条边要么使一个点被覆盖,要么使两个点被覆盖,而使两个点被覆盖的边肯定不会超过最大匹配,所以一个上界就是选出最大匹配的边,然后剩余的点再依次选择一条边,而这个上界显然是合法的,所以最后有
阅读全文
摘要:这道题目求的是最小的代价,我们每选择某一行/列就会产生代价,故将行/列作为二分图的节点,然后就可以知道求的是最小点覆盖 这里我还要写一下konig定理的另一种证明 首先证明合法性。在求出最大匹配后,我们从每条匹配边任选一个点组成一个点集 (注意根据定义,不同匹配边的两个端点是不同的,假设最大
阅读全文
摘要:这道题目有个很显然的二分图就是将猫和狗分开,但是你会发现这样根本做不出来题目,所以我们考虑更扩展的东西 这道题目要我们求最多的客户,我们最开始是把客户当成边,跑最大匹配,发现不行,所以我们现在尝试把客户当成点 想到什么?对,就是最大独立集 于是,我们考虑如何建图 回想一下独立集:任意两点没有边相连
阅读全文
摘要:这道题目从感觉上来看,应该是匈牙利的模板的过程中,如果遇到某个点找不到增广路,直接结束循环,即 for(int i=1;i<=m;i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) ans++; else break; } 事实上,这确实是答案,那么为什么是对的
阅读全文
摘要:这道题目显然先建反图,然后考虑什么时候能够确定关系 首先给出的匹配一定要是完备匹配,否则的话就无解 然后我们对所有的完备匹配求交集,就会发现求的是完备匹配的必须边了 上面给的方法的复杂度是 ,实际上我们可以优化到 ,也就是用“排版幻灯片”这道题目的方法 updat
阅读全文
摘要:这道题目非常好,是一道二分图染色的典型题目,记住 见这篇题解 然后说一种错误做法:求原图的SCC然后缩点讨论 比如上图,其实是不能作为一个组的,因为第二个点其实并不认识第一个点(题目没有说有传递性) update 2024.5.30 自己重新做的时候做出来啦 首先就是记住这个二分图补图的技巧。本来最
阅读全文
摘要:注意,在调查前应该有一个定下来的顺序,就是不管这张图是哪一种都按这个顺序进行调查 由题意,这 个人当中一定有一个人是杀手 那么就相当于有 张图,其中每张图都有且仅有一个黑点(剩余都是白点),且这些图的黑点都不同(黑点就是杀手) 首先我们肯定要保证知道杀手,所以一定只会询问入度为\(0
阅读全文
摘要:这道题目稍微想一下就可以知道,在缩点之后一定要长成一条链,即“有唯一的topo序” 我们考虑证明一下这个结论,利用数学归纳法 对缩点后的图,如果入度为 的点,如果有 个以上,那么显然是不行的,所以如果为 的点只有一个 然后我们从入度为 的点开始走,假设我们走的前面一段
阅读全文
摘要:这道题目非常easy,但是我还是要讲一下两种做法 第一种,也就是我最开始直接想到的,求出割点后缩成一颗树,然后再判断 第一种固然简单,但是第二种方法则是利用了割点判定法则的证明过程(即删掉一个点后,具体哪些子树会与上面一整坨失去连通性) 就是当前搜索到 的时候,我们会枚举一个子树根节点\(y
阅读全文
摘要:这道题目切点的思想肯定是要借鉴的,然后在同一条线段乘坐两次车的这种特殊情况也要考虑 其实我最开始的时候用DP就是觉得这种特殊情况很烦,但实际上这道题目教会我们先不要管特殊情况,最后在单独处理特殊情况会很简单 特殊情况的处理直接用长度为 的线段覆盖就好了 update 2024.5.29 重
阅读全文
摘要:主要是证明第二问,也就是将一个有向图变为一个SCC所需要添加的最少的边数(与将一个无向图变成一个e-DCC联系起来) 首先, 是下界,因为连一条边最多只能减少一个零入度点和一个零出度点并且一个零入/出度点如果不添加出/入边是永远无法被消除的(会一直待在那里),而最终的图不可能有
阅读全文
摘要:这道题目其实是样例给我的启示。。我看到 的结果是 ,就猜想可以把所有的长度为 的 串都加进来 所以我们先写出所有 串,那么再看一下样例,会发现第一个串是 ,于是乎猜想起点都是全 串 那么全 串的下面一个可以接什么呢?显然可以接\
阅读全文
摘要:这道题目就是无向图版的输出最小字典序而已,还是按照点的编号从小到大进行排序
阅读全文
摘要:这道题目就是想清楚每一个vDCC为啥没有必经点,因为v-DCC中任意两个点都包含在一个简单环中 以及注意一下代码的细节,因为这道题目是从一条边走到另一条边,所以细节比较多
阅读全文
摘要:主要是想一下为什么一个e-DCC里面没有必经边 update 2024.5.28 利用任意一条边都包含在一个简单环中即可
阅读全文
摘要:这道题目探究一下圆方树的性质就好了(其实vDCC缩点之后的图不是圆方树) 注意大部分题解说的割点为 的vDCC其实就是缩点后的度数为 的点(这个点肯定不是单独的割点) update 2024.8.19 需要明确的点:对于缩点之后的图(原图有割点)来说 1.割点和v-DCC交替出现(即
阅读全文
摘要:对一个e-DCC来说,由于任意一条边都被包含在一个简单环中,所以任意两个点我们都可以构造出两条不相交的路径,如下 也就是把每一条边都替换成简单环的另一条路径 而对于位于不同的e-DCC的点显然是有必经边的 于是这道题目就转化成一个模型:给连通的无向图加边,使得无向图没有桥(即变成边双连通分量),最小
阅读全文
摘要:这道题目的第一个难点是处理输入数据 首先一个很自然的想法是把每一列车次都当成一个节点,这样的话最多有一百万个节点,配合spfa显然超时 然后我们就可以像把一整个行车路线作为一个节点,但可能会出现下面的情况,此时也超时 也就是说前面所有点的末尾都是最后一个点的开头,这样子连的边就太多了 但是现在我们就
阅读全文
摘要:最后以 为起点求最长路就好了(判断条件是有无负环,即有无解) 这一道题目就给了我们一个处理三个未知数的方法 另外,这道题目如果像上面的图片一样以时间为考虑的对象,写代码就非常简单,而如果以人为考虑对象(设 表示前 个人至少雇佣多少个),那么代码就非常难写 update
阅读全文
摘要:这道题目看起来很简单,但是分类讨论是否能明白呢? 具体的分类讨论方法见这篇文章
阅读全文
摘要:然而,我并不是很看得懂这个证明。。。 这个感觉跟上一道题目的区别,上一道题目新建了一个源点,就可以让所有未知数的值不大于 ,然而这道题目不行,只是也能让所有未知数的值达到可能的最大值 update 2024.5.27 总算给我弄明白这个最大最小到底是什么个意思了 首先注意不等式关系具有传递性
阅读全文
摘要:   我们把所有直径都画出来,每次都取交集,然后就可以
阅读全文
摘要:不是,这为什么是对的啊? 第二个方法见蓝书 我们来严格证明一下这个做法 首先证明严格次小生成树的边一定只会与最小生成树的边相差一条边(只有一条边不一样) 假设有两条边不一样,我们删除最小生成树中不在严格次小生成树中的两条边,图就会分裂成三个连通块,如下 红色虚线是被删除的边 然后严格次小生成树新加入
阅读全文
摘要:主要讲一下心路历程 首先很显然的一点是,我们切断主要边之后,如果只考虑主要边,那么原图就会分成刚好两个连通块,那么此时如果有附加边连接两个连通块,那么这种附加边有且只能有一个 所以我们考虑对每条主要边,如何统计这种附加边的条数,但我们发现这种统计非常困难,于是我们使用转换对象法,考虑统计每一条附加边
阅读全文
摘要:一个树上每一个点都有一个组别,求相同组别的点对相差的最大距离。可以叫这题为“部分树的直径” 有一个结论:对于任意一个组别,深度最大的点一定在答案的点对里。 审视一下这个证明是如何分类的,对于LCA的部分,显然是通过讨论 是不是 的祖先来完成的;之后是通过讨论是否是子树来进行的 所以,
阅读全文
摘要:先求原图的M(最大)ST,然后树上两点路径边权最小值就是答案 证明:假设原图存在一条路径 , 上存在非树边而且 的最小值比树上路径的最小值大,那么对于 上的某一条非树边,考虑在Kruscal的过程中,他之所以没有被选中,是因为他的两个端点已经连通了,而由于连通这两个点
阅读全文
摘要:这一道题目,我们看到 非常小,所以可以尝试从 入手 对每种组合,我们想要求出必须选择这些组合的MST,也即“含有必须边的MST”(尽管现在还不清楚每个组合的边是什么,下文会说) 这种情况跟陈立杰出的那道“tree”非常像,我们只用把必须边的边权缩小放到前面然后跑Kruscal即可 那
阅读全文
摘要:先来证明一个性质:同一个图的不同生成树的最大边权和最小边权相等 最小边权很显然相等,这个不用证 主要是最大边权 假设有两个生成树都是最小生成树,其中 的最大边权 小于 的最大边权 在 中删去最大边,会形成两个连通块,假设这条最大边连接的是
阅读全文
摘要:update 2024.5.23 如果要严格证明上述做法的正确性,可以用结构归纳法证明每条边都至少被经过两次,除了根节点的每个点都至少被经过其度数次,根节点至少被经过其度数次加一,然后显然存在一种方案是所有值同时取到最小值
阅读全文
摘要:这道题目作为枚举子集的题目见识一下 首先对于一个连通块,如果点权之和为 ,那么我们算出MST显然就是最优解 我们看一下数据范围,可能是考状态压缩 我们把状态 设出来后,可以先尝试考虑某一个点,但是你发现这样不太好考虑,而且只考虑这一个点的话,那么这个点所加入的连通块的点权之和为\(0
阅读全文
摘要:不要一看到特殊点就想虚点,这道题目我们这么建模 假设我们的 已经定了,我们把边权小于等于 的全部加入,那么图就会形成一个若干个连通块 显然 越大连通块个数越少 这里当然启示我们用二分,然而也有更简单的方法 我们借鉴Kruscal的过程,当维护的森林刚好有 个树时直接停
阅读全文
摘要:先来转换一下题意:首先,所有点一定与公园连通,否则的话存在一个人到不了公园;其次一条边最多被经过一次,否则的话第一次经过的车可以在起点等着,等到第二辆车到,然后两辆车合为一辆车。综上,我们选取的边至少要有 条边,每选取一条边就将这条边的权值计算到答案中(如果一条边被选取了却不计算答案,那
阅读全文
摘要:来严格证明一下做法 我们利用数学归纳法证明,过程很像“推论+数归证明Kruscal” 假设我们按照书上这么添加后,执行Kruscal 当前执行到 这条边,已经选上的边都是最开始的树边,已经循环过但没选上的边都是添加的非树边 假设 是添加的边,那么 一定不会被选上,因为此时已经
阅读全文
摘要:其实这个证明与前面那个证明很像 假设最终生成的生成树不包含这 条边中连接生成森林的两个不连通节点的最小的边,那么我们从这些最小的边中任选一条边加入到树中会形成一个环,而且这个环(除了加入的这条最小边)一定存在一条边不是最开始的 条边中的某一条(因为如果这个环除了加入的最小边,剩余
阅读全文
摘要:其实这个对偶图的定义有点问题,正确的: 所以PPT画的对偶图也有点问题,还要在 号点上画一个闭环(之后的图没有做修改) 这个证明唯一想不明白的就是为啥紫色的边一定会构成一棵树,主要是无法判断是否连通 求出区域数 之后,答案就是 (每开一扇门,就会让两个区域连通,减少一个连
阅读全文
摘要:我们先来考虑没有特殊节点怎么做 设 表示以 为根的子树, 是否放置军队的最小代价,这个DP非常简单,方程就不写了 然后考虑有一个特殊节点怎么做,我们不妨以这个特殊节点为根,于是就可以发现,其他点的 的值显然都不变,对于根节点,题目要求是否放置,输出对应
阅读全文
摘要:这道题目真的不只是绿题。。蓝肯定是有的 设状态 表示从 到 的长度是 是否可行 注意到题目给的每一条边的长度都是 ,所以对任意一条路径,每次跑步机结束时一定是停在某个点上的,不会停在某条边上,所以这个状态设置是正确的 然后还注意,为什么第
阅读全文
摘要:蓝书求最小环的思路,就是说我们要保证遍历所有的环 那么怎么保证遍历所有的环呢?我们就要给每个环选一个代表元素,由于 (阶段)是很特殊的,所以我们选择 当代表元素,而且让 最大,然后就不难想到蓝书上的做法 注意一定要在floyd算法执行之前进行ans的更新 当然也可以把\(k\
阅读全文
摘要:单源最短路求解路径条数很好做,但是多源最短路要稍微麻烦一点 dij求最短路计数只适用于正边权图计数,如果有 边不一定能保证取出的时候的计数是正确的(有零环) spfa想一下,还没想 这一道题目就是用floyd求解多源最短路条数,正确性的话也是按照蓝书上那么想 就是记录路径条数的数组其实也是省
阅读全文
摘要:这道题目主要是读懂题意,知道是求最短路。。。联系下实际就好了 但是我想了一个问题啊,floyd求解的时候,比如求最短路,为什么要没有负环呢?很显然是因为存在负环时,就没有最短路了,但是现在floyd不像dij,他还是只会跑 ,那他跑出来的东西是啥 我觉得是不经过环的最短路,用数学归
阅读全文
摘要:方法一: 来证明一下为什么一定可以找到严格次短路 显然最终得到的 比 大,如果 不是严格次短路,那么 还比严格次短路大,假设图中严格次短路为下图 那么我们枚举这条路径上面的边的时候,得到的 肯定比 小。因为\(temp\
阅读全文
摘要:这道题目也很简单主要是说一下 最开始我的状态是 表示一共 位, 的数量为 的方案数 但后面可以知道,直接设出 和 的差值就好了 实际上,由组合数学的知识,我们可以直接对 进行计算的,没有必要数位统计
阅读全文
摘要:这道题目没啥好说的,主要是想一下统计答案的过程,把细节想明白
阅读全文
摘要:主要讲一下状态怎么设置的 首先第一维度肯定是很好设置的,但是我们发现我们在枚举最高位数字的时候,由于我们要让余数为 ,那我们就要知道后面 位数字的数字总和是多少(这样就知道了是对谁的余数),以及取模之后是多少,所以可以添加两个维度 但是我们现在发现如果只有这三个维度是没有办法从后
阅读全文
摘要:主要讲一下这个状态怎么想到的 首先,识别这道题目是一道数位DP 数位DP一般都是设 表示 位数字符合题意的总数量,剩下的维度再具体问题具体分析 然后在转移的过程中,我们考虑最高位数字的取值,看还需要什么维度加到状态里 比如这道题目,我们最开始可以设出 表示\(i\
阅读全文
摘要:这道题目。。。就是“着色方案”这道题 update 2024.9.16 代码实现有一些细节 首先,不要每组数据都清空mark,这样子会TLE;实际上,f[a][b][c][d][last]的值跟每组数据输入的牌的种类是没有关系的,所以不用清空 其次,这里的相同面值不同花色的牌是不一样的,按照“着色方
阅读全文
摘要:这道题目真实绝了,这篇随笔主要是对蓝书上面的注释 首先那个结论肯定要知道,然后选取 号点作为基准点也是想到了的 那么接下来肯定就是把 号点所在连通块当做树根嘛,问题是怎么去分配剩下的点 我最开始想的是像树形背包一样去DP,但是不知道具体有多少子树,然后我又想枚举子树个,但是显然会爆炸
阅读全文
摘要:这道题目挺综合的。。 首先看到互质,可以知道这是约数一类的题目,而约数一类的题目,可以考虑分解质因数 所以我们给每个数分解质因数,我们发现,要让两个人选的数字全部互质,那么有一个显然的充要条件:甲选的数字的质因数集合和乙选的数字的质因数集合没有交集(要么从单个数考虑,要么从整体考虑) 剩下的看这篇题
阅读全文
摘要:补集思想转化见蓝书 这里主要讲一下另一种递推方程 对任意一种连通图,我们将 号点连的边全部删去,还与 号点连通的点与 号点组成一个组,剩余点与 号点组成一个组 假设 号点所在连通块一共有 个点,则剩余的点有 个 不考虑这两部分的相连问题,一
阅读全文
摘要:这道题目二分的做法见蓝书 介绍一个斜率优化的做法 这种分类讨论与一般的斜率优化有所不同,但也很好分出这个讨论范围 但是说实话,我是证明不了下面为啥直接取队头就可以解决问题了。因为 每增加 ,纵坐标也至少增加 ,但是可以凭这个说明斜率一定不降吗?否则的话为什么可以直接舍弃掉一些
阅读全文
摘要:轮廓线DP,最主要的就是把轮廓给描述出来 这道题目很容易发现一个性质,就是他的轮廓一定是长成阶梯(锯齿)状的 于是我本人想到的一个状态描述就是去描述拐点(也就是计数单增函数的那个模型,比如接下来的数列可以理解为 表示往右走, 表示往左走):用两个二进制数表示行和列的拐点(为
阅读全文
摘要:看这篇题解 然后题解里面是边分区间边进行hash,我的代码是先分出区间再进行hash,可以想一下题解的代码主要怎么写 然后特别注意,如果手写hash表,会出很大的问题。首先这道题目的内存空间有限,三哈希及以上都不太可能,即使二哈希但是手写hash表的缘故,两个不同的hash值在两个hash表里面都插
阅读全文
摘要:这道题目跟“生日礼物”非常像,但这里必须刚好选择 个 这个状态具体一下:一定要选择第 个数 接下来考虑优化空间 在考虑优化时间 然后这道题目就做完了 另外,如果这道题目不要求一定选择第 个数,那么就要用前缀和,优化时间的部分会更加麻烦 update 2024.6.25 其实跟
阅读全文
摘要:这一道题目与费用提前计算的那类题目很像,但是由于每个宝藏每秒钟不会损失价值,所以不是费用提前计算,但是还是可以按照类似的状态进行推导 这个区间DP滚动数组好好理解一下,其实就是我们只需要用到前一阶段的量,由于阶段是长度,所以实际处理中一般按照如下处理 然后这道题还告诉我们,别看到 为\(10
阅读全文
摘要:这道题目真是woc 如果像题解那么认为从 到终点考虑就非常简单,但是如果从起点到 考虑好像就非常难,做不出来 所以以后两个方向都可以想一下 update 2024.7.4 其实这道题目除了吸收两个方向都想一下,还要记住这个是怎么维护往下走走到的第一个栅栏的 像这种“第一个”的,可以尝
阅读全文
摘要:先倒序处理(为什么下文会说),然后就变成了划分尽量多的段,使得每段的和单调不减 很容易设置出一个状态 表示前 堆草,最后一段是 的最大高度,方程也很容易推导,但是时空复杂度显然炸掉 那么此时我们就应该思考,要么就是利用数组值来搞一些事情(一般是交换两种维度
阅读全文
摘要:这里尝试利用单调队列优化,这里不好直接用单调队列的原因是因为(以买为例) 不是只与下标有关(这里下标为 )的 所以解决方案一:我们将下标变成一个整体,再把后面的代价换掉然后将与下标无关的直接提出去 解决方案二:利用“蚯蚓”那一道题目的思路进行单调队列的维护
阅读全文
摘要:看似很简单的单调队列优化DP 但是如果状态是表示前 个烽火台被处理完的最小代价(即不知道最后一个烽火台在哪里)就无法降低复杂度 因为假设你在区间 中枚举最后一个烽火台(设为 ),你前面的状态并不是 ,因为此时 已经可以覆盖前面的一些烽
阅读全文
摘要:先来看老板记忆化搜索的做法 但是显然没办法估计时间复杂度。。 我觉得更标准的做法是先用tarjan变成DAG后再DP
阅读全文
摘要:这道题目真就离谱,我只能说见识一下 这一点我是想到的,注意斐波那契数列增长的非常快 这一点我没有想到,但好像并没有什么用 这玩意我也想到的,但是完全无法证明,说实话只能猜 这些我也都想到了(注意一个数与其相反数的斐波那契表示法的项数显然是一样的),但是显然DP数组太大了承受不了,怎么办? 好家伙我直
阅读全文
摘要:看到长度是 ,想到区间DP 但在这里说一下,设 表示前 个字符,转换后以 结尾的最短长度是推不走的,因为原来的字符串的第 个字符合并之后产生的新字符有可能继续合并,这是有问题的 update 2024.6.29 这个区间DP的正确性与石子合并一
阅读全文
摘要:状态方程的转移好好想想 update 2024.9.11 重新做了一遍,差一点做出来了,就是没有把Last这一维的意义搞明白 心路历程:很显然设置一个方程就是直接暴力枚举的那种,就像PPT说的一样,显然会超时,于是尝试优化。像这种指数超时的情况我们就把底和幂倒过来( 太大了,那么\
阅读全文
摘要:非常好的一道题目,感觉这种类型的题目都被玩出花来了。。。 主要是这个可以选择送或者不送非常搞人心态,虽然从实际情况上来看就是路过一个客户时,如果是正利润那么一定要送,如果是负利润那么一定不送,但是为了DP的方便,我们可以选择即使是正利润也可以不送,负利润也可以送,只要最后覆盖了最优答案即可 注意好好
阅读全文
摘要:注意状态 定了之后,终点一定是固定的 update 2024.7.2 这道题目重新做的时候,发现 只有 ,所以用了容斥原理,考虑设 表示使用集合 中的牌,没有经过厄运数字/只经过了第一个厄运数字/经过了两个厄运数字的方案数,然后进行分类讨论
阅读全文
摘要:这种状态压缩计数DP还挺新奇的,可以记住 update 2024.9.11 这道题目的做法就是两个 法一:状态压缩。见这篇题解。看到小范围的 不难往状态压缩上面想。主要就是提醒一下,这里用刷表法是非常简单的,而且不重不漏,用填表法则要麻烦得多。特别是状态压缩,一定要注重刷表法啊 法二:容斥原
阅读全文
摘要:这个看起来有后效性的DP挺神奇的,最后记住吧 主要是看到 太小了,所以可以想到状态压缩 但是其实我自己也想到一个状态 设 表示当前打完饭的是前 个人和 后面状态为 的人,而且最后一个打饭的是 就是没有像题解一样把最后一个打饭的人是谁给
阅读全文