02 2025 档案
摘要:这题目其实说实话还是很简单的,吗? 看到跟点有关系,其实就是求过程中的割点有多少个,这就直接用一个点双缩点,在缩点后,这个图就变成一个树了,而这里就直接用一个树上差分就可以解决。当然本身这个节点也是要记的。 (好吧,边双写了 20pts 的傻子也是在这里写题解了)。 #include<bits/st
阅读全文
摘要:原题 写一个非常符合直觉的做法,这题肯定要强联通分量缩点,缩完点之后呢?我们发现逆向边只有一条,这启示我们可以通过分层图的方法来解决这个题目。同层连正边,异层连反边即可,边权是每个联通分量的大小。跑一遍 dij 即可。时间复杂度应该是 O(nlogm) 的,代码实现很简单。 #incl
阅读全文
摘要:左偏树学习笔记 左偏树其实就是一个去实现可并堆这个数据结构的工具,其实完全可以用其他的写法,比如说配对堆,二叉堆,斐波那契堆等等,但是左偏树的写法更加常见,且使用起来更加方便,码量也不大。 我们一般可以用一个启发式合并实现 O(log2n) 的合并,但是这个左偏树可以实现 \(O(\l
阅读全文
摘要:差分约束学习笔记 差分约束的题目通常是给你一些 xi 和 xj 的关系式,求是否有可行解等。 而这类题目的技巧也很简单,就是连边建图即可。 这里给出一些关系式的建图的方法 \[x_i \le x_j +c \Rightarrow j\xrightarrow{c} i\\ x_i
阅读全文
摘要:不带删的尺取。 这个技巧其实是一个运用双栈来模拟队列的一个应用,尺取可以理解为一个队列。 其实就是用一个栈来记队头,一个栈来记队尾,每个栈记对应的对应点记每个点的权值或下标,和它所对应栈的前缀。 每一次入栈时直接入栈(队头)更新前缀即可,而出栈时,若栈(队尾)已经空了,这时就应该把队头的栈直接倒着插
阅读全文
摘要:计算重复(acwing 294) 这题的话我们很好想到暴力的做法,这个最终的满足的式子其实是一个幌子,这里只需要求最大的 p 使得 conn(s2,p) 能由 conn(s1,n1) 生成 。输出 p/n2 如何求这个最大值?像如果你直接让s1 一个一个对过来理论来说是可以的,但是时间复杂度
阅读全文
摘要:前言 因为有一些算法本人接触的不多,而且用到的比较少,这里用这一个帖子进行总结。 分治技巧 Norma Interesting Sections 分治题,这样的既有 mx,又有mi 的题直接可以用一个"三指针"的写法,一个是右边遍历的指针,而左边有两个指针,一个记最大值,一个记最小值
阅读全文
摘要:分块学习笔记 分块是基于区间修改和查询的工具。 用一道题来引入: 给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值。 #6277. 数列分块入门 1 这道题如果用暴力来求解的话,需要 O(n2) 的时间复杂度,这样我们是不满意的,那怎么办呢?我们想到,如果 \(l=1,r=n
阅读全文
摘要:同余最短路学习笔记 前言 因为没有做出来简单的同余最短路,遂来写一篇学习笔记涨涨记性。 正文 同与最短路,其实是一种类似完全背包的算法,求的东西都是一样的,但是同余最短路可以求的范围更广。 通常情况下表达式都是 $\sum_{i=1}^{n} a_ix_i =b $ 是否可行的情况。 这里的 \(a
阅读全文
摘要:树状数组学习笔记 树状数组的使用场景:可差分且有结合律的运算符,如 ^ + * 树状数组优点:编码简单,常数小,但思维量较大。 板子: struct B_tree { int c[N]; void clear(){ memset(c,0,sizeof c); } void add(int x,int
阅读全文
摘要:数位dp的标志: 要求统计满足一定条件的数的数量(即,最终目的为计数); 这些条件经过转化后可以使用「数位」的思想去理解和判断; 输入会提供一个数字区间(有时也只提供上界)来作为统计的限制; 上界很大(比如 1018),暴力枚举验证会超时。 数位dp的模板题 A - 不要62 实现非常
阅读全文
摘要:斜率优化dp 的小总结 首先下凸包/上凸包的求法可以使用单调队列/单调栈来实现。 #include <bits/stdc++.h> #define int long long using namespace std; const int N = 5E5 + 5; struct node { int
阅读全文
摘要:矩阵乘法 对于线性简单的 dp 可以使用矩阵快速幂加速转移,可以从 O(n) 的时间复杂度降到 O(k3logn) ( k 为矩阵的大小,通常小于10) 先给出矩阵乘法的模板代码: struct MAT { int c[15][15],n,m; MAT() { mems
阅读全文
摘要:一道非常综合的背包题。 我们发现每一个点的选择对它的父亲的合成有影响。 这样的话我们可以尝试把这个因素记下来。 frt,i,j 来表示 rt 及它的子树中选择 i 个作为合成的材料的话,花费 j 的最大战斗力。 这样的话我们就可以直接用多重背包来写了。 先枚举
阅读全文