随笔分类 -  模板

摘要:写起来简单无比,不比 Tarjan 香? 方法 按照[1...n]的顺序在反图(边方向相反)上dfs一遍,出栈时将节点存入数组q[1...n]中 按照q[n...1]的顺序在原图上dfs一遍,每次遍历就是一个新的强联通分量 为什么是正确的? 核心在于封死连通分量往外走的路。 如果原图u-->v有一条 阅读全文
posted @ 2023-12-07 19:41 尹昱钦 阅读(33) 评论(0) 推荐(0) 编辑
摘要:叉乘(叉积) 定义(二维): p1×p2=x1y2x2y1=p2×p1性质: 若 p2p1 的逆时针方向,则结果大于 0 。 若 \(\vec{ 阅读全文
posted @ 2023-12-03 13:51 尹昱钦 阅读(20) 评论(2) 推荐(1) 编辑
摘要:传送门 解题思路 直接用洛谷题解! 说的好! 怎么求有向图的欧拉路径呢? 如果有起点,从起点出发,然后不断dfs,对每个点记录其出边已经到了哪一条,然后当一个点的出边都遍历完的时候就把这条边加入栈中。 这样就找到了一条合法的欧拉路径。 可以使用当前弧优化,时间优化到O(n+m)。 这个题因为要求字典 阅读全文
posted @ 2021-11-19 11:35 尹昱钦 阅读(125) 评论(0) 推荐(0) 编辑
摘要:传送门 解题思路 若干平衡树,每次操作有两种,一是合并两个Splay,二是查询某一个点所在的平衡树里的第k小的点的编号。 首先用并查集维护某个点在哪个平衡树里,然后rt[i]记录编号为i的平衡树的根。 每次合并时启发式合并,直接把小的树的每个点暴力insert到大树里。 查询正常操作即可。 为了方便 阅读全文
posted @ 2021-11-18 17:12 尹昱钦 阅读(82) 评论(0) 推荐(0) 编辑
摘要:传送门 解题思路 Splay如何维护序列呢? 以序列下标作为val值,扔到Splay中。 因为有区间翻转操作,所以实际上并不能保证绝对的按照val值排序,也就是说Splay的中序遍历结果是真正的序列,而val值对应的是当前序列的每个元素原来的位置。 与普通的Splay的区别在于多了一个区间翻转操作, 阅读全文
posted @ 2021-11-06 20:44 尹昱钦 阅读(59) 评论(0) 推荐(0) 编辑
摘要:传送门 Splay 细节是真他妈多,写了一天,写吐了。 后悔没先学treap了。 需要实现以下函数: void Init():重置整棵树(删除了整棵树的时候用) int New(int val,int fa):新建一个节点,权值为val,父亲为fa,返回节点编号 void Delete(int x) 阅读全文
posted @ 2021-11-02 21:33 尹昱钦 阅读(46) 评论(0) 推荐(0) 编辑
摘要:任何一个ICG(公平组合游戏)都可以转化成一个有向图移动问题,从而使用SG函数求解。 SG函数的定义为:SG(u)=mex{SG(v)}。 mex表示集合中第一个未出现的数字。 SG函数可以用类似拓扑序的方式,从最终状态一步步向前推。 最后若起点的SG函数值不为0,则先手必胜。 若多张图多个起点? 阅读全文
posted @ 2021-11-01 22:03 尹昱钦 阅读(208) 评论(0) 推荐(0) 编辑
摘要:点分治 采用分治思想。对树上路径问题进行查询时,把路径分成两部分,一部分是经过根节点的路径,一部分是不经过根节点的路径。 而在处理不经过根节点的路径时,可以才有分治思想,递归到左右子树进行求解。 这样复杂度是 O(n2) 的,但是若我们每次选取的根节点都是要求解的子树的重心,则复杂度可以优 阅读全文
posted @ 2021-11-01 17:02 尹昱钦 阅读(45) 评论(0) 推荐(0) 编辑
摘要:线性基 推荐Menci博客的前半部分:https://oi.men.ci/linear-basis-notes/ 非常学术的讲解了线性基。 然后对于如何构造线性基,我一般使用以下方法: 对于每一个加进来的数,从高位向低位扫,若某一位是1,则看线性基的a[i]是否有值,若有,则这个数^=a[i],否则 阅读全文
posted @ 2021-10-26 22:58 尹昱钦 阅读(68) 评论(0) 推荐(0) 编辑
摘要:传送门 基环树 定义: n个节点n条边的连通图。 性质: 很显然有且仅有一个环。 如何找环: dfs,每次读到一个节点入栈(类似Tarjan) 拓扑排序:最后剩下的度数不为零的点一定就在环上 题目通常解法: 把环看做一个整个树的根,然后把子树的信息挂到环的每一个点上,问题变成了环上操作,再根据题目需 阅读全文
posted @ 2021-10-25 18:24 尹昱钦 阅读(31) 评论(0) 推荐(0) 编辑
摘要:传送门 解题思路 思想:将问题转化为图论问题。 因为一个点只有两个状态,所以每个点可以拆成 i 和 i+n 两个点,u 连向 v 表示选择 u 就必须选择 v。 根据条件建图(注意一定要建对应的反向边(例如建立 u->v+n,就必须再连 v->u+n))后,跑一遍Tarjan求强连通分量。若发现存在 阅读全文
posted @ 2021-10-19 13:03 尹昱钦 阅读(44) 评论(0) 推荐(0) 编辑
摘要:推荐博客:扶苏的bitset浅谈 笔记: 定义时可以赋值 bitset<10> b(8);bitset<1005> b(string("01010101")) 会分别存储为0000001000、0001010101 函数 b.to_ulong() 和 b.to_ullong() 会把b里面的数转化为 阅读全文
posted @ 2021-10-15 09:42 尹昱钦 阅读(76) 评论(0) 推荐(0) 编辑
摘要:传送门 解题思路 来pyyz过掉的第一题祭 一开始在前来个模板上改了改,发现T飞了。 看一下题解发现,因为标记不会清空,所以会被卡到O(ST)。 于是考虑优化。 因为AC自动机本质上是一个有向无环图,所以考虑每次更新答案时只更新到当前节点,最后拓扑排序遍历一遍图统计答案即可。 复杂度降到了O(S+T 阅读全文
posted @ 2021-10-11 15:59 尹昱钦 阅读(62) 评论(0) 推荐(0) 编辑
摘要:传送门(简单版) 传送门(加强版) AC自动机 推荐阅读:洛谷日报 讲的真的很好。 我没法再说的更好了。 甚至我的板子都是照着他的敲的。 加强版 说是加强版,实际上只需更改一下num数组表示的含义:从当前点有几个模式串结尾,改成以当前点结尾的模式串的编号。 在查询过程中也不需要清空num标记。 注意 阅读全文
posted @ 2021-10-10 23:53 尹昱钦 阅读(52) 评论(0) 推荐(0) 编辑
摘要:传送门 解题思路 哈夫曼树(Huffman Tree),就是一棵树满足叶子节点的权值*到根节点的距离的和最小的树。 一开始假设整个图没有任何连边。 然后贪心思想,每次新建一个节点,取k个权值最小的节点作为这个节点的儿子(相当于把节点合并)。 这样每次少k-1个节点,会导致最后一次合并不满k个节点。 阅读全文
posted @ 2021-10-08 20:07 尹昱钦 阅读(90) 评论(0) 推荐(0) 编辑
摘要:传送门 解题思路 暴力枚举指数的复杂度是 O(p) 的(费马小定理) 所以用分块思想。 将 l 分成 p 块,每块的长度为 p。 先预处理出 i=1pbimodp 的值,开个map存下值所对应的 阅读全文
posted @ 2021-10-08 09:02 尹昱钦 阅读(83) 评论(0) 推荐(0) 编辑
摘要:传送门 Lucas定理 OI-Wiki讲的太好了:http://oi-wiki.com/math/number-theory/lucas/#lucas 做一下总结补充解释: (a+b)pap+bp(modp) \(f^p(x)\equiv f(x^p) \pmod p 阅读全文
posted @ 2021-10-03 19:11 尹昱钦 阅读(68) 评论(0) 推荐(0) 编辑
摘要:传送门 什么是分层图 在一个图上,按照某种限制,进行分层,在相邻两层之间按照某种联系进行连边。 如何实现 一般有两种方法:二维数组法和状态压缩法。 二维数组法:a[i][j]表示第i层的节点j。 状态压缩法:a[j*k+i]表示第i层的节点j,其中k表示层数。(相当于把二维坐标压成一维。) 应用 在 阅读全文
posted @ 2021-09-28 15:38 尹昱钦 阅读(49) 评论(0) 推荐(0) 编辑
摘要:传送门 扫描线 什么是扫描线? 在一个二维平面上有许多的点,那一根水平或者竖直的直线将其切割。 用途? 降维。 可以把二维问题转变成一维处理。 解决许多数据结构问题。 lxl的重要思路:一维问题 >二维平面 >扫描线降维。 应用条件? 离线。 实现? 线段树或者树状数组。 树状数组常数比较小所以:区 阅读全文
posted @ 2021-09-15 09:32 尹昱钦 阅读(129) 评论(0) 推荐(0) 编辑
摘要:传送门 斜率优化 当求dp[i]最小值时,满足一次函数 y=kx+b 其中 y=dp[j] ,k 与 i 有关,x 与 j 有关,b中包含 dp[i]。 这时问题就可以转化为 在众多点(x,y)中找到一个点使得用斜率为k的直线切这个点时得到的截距b最小。很显然这时dp[i]从这个点转移过来最 阅读全文
posted @ 2021-09-11 17:42 尹昱钦 阅读(58) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示