随笔分类 -  OI

摘要:前言: 由于本人之前在使用 map 进行离散化时被喷了,并且不明白一些常用的STL怎么使用,所以恶补了一下 感谢 FQR 的指导 离散化 unique(tmp + 1, tmp + n + 1) 的执行原理是把把没有重复的放在前面,重复的所有元素都扔到后面,返回的值为第一个重复元素的下标 lower 阅读全文
posted @ 2025-07-31 15:53 daydreamer_zcxnb 阅读(13) 评论(1) 推荐(0)
摘要:算法理解 可以看这篇讲解 然后注意深入理解为什么线性基插入顺序不会影响线性基的大小和作用 T1: 结论(性质): 在线性基中,任意选取一些数的异或和都不相同 即任意选取大小为 \(k\) 的线性基中的任意个值的异或和有 \(2^k\) 种 证明: 如果选出来的集合有交: 假设: \(x \oplus 阅读全文
posted @ 2025-07-30 19:45 daydreamer_zcxnb 阅读(19) 评论(0) 推荐(0)
摘要:算法理解 ybt上讲的挺清楚的。。。 T1: 注:看洛谷原题,其中父节点编号是小于该节点的,我们把该节点向父节点上合并,为什么这样做?因为树的深度不定dfs会爆栈 需要维护每个节点在左偏树上对应的根 点击查看代码 #include<bits/stdc++.h> #define ll long lon 阅读全文
posted @ 2025-07-28 20:18 daydreamer_zcxnb 阅读(15) 评论(0) 推荐(0)
摘要:算法理解 建议食用题解再结合一本通题解,一下就明白了 讲的非常清楚 本质上是我们发现现在已知 \(k\) 想要求 \(b\) 最小,其中有很多个 \((x,y)\) 可以进行计算答案,找到一个 \((x,y)\) 可以使 \(b\) 最小,博客的内容就是具体怎么做 T1,2 代码 点击查看代码 #i 阅读全文
posted @ 2025-07-28 10:16 daydreamer_zcxnb 阅读(16) 评论(0) 推荐(0)
摘要:算法学习 先在原树上通过siz的递归找根(因为还要算子树外的大小,所以还需要求一下整颗子树大小 通过遍历子树求出来每个节点的深度,一边统计答案一边计算 用vis打在根上的标记来分割子树,递归求解 看这里还有这里 但他的代码中有一些错误(第一篇) 一个是在计算前没有先计算子树大小,另一个是没有在修改 阅读全文
posted @ 2025-07-27 08:57 daydreamer_zcxnb 阅读(16) 评论(0) 推荐(0)
摘要:匈牙利算法 目前看到最清晰的题解 注: 匈牙利算法仅仅只针对左边的节点枚举,\(mat\) 存的是右边的节点对应左边的节点 \(vis\) 数组代表这一次增广路已经访问过的点,所以每次都要重置 \(vis\) 数组 #include<bits/stdc++.h> using namespace st 阅读全文
posted @ 2025-07-26 09:56 daydreamer_zcxnb 阅读(11) 评论(0) 推荐(0)
摘要:算法理解 期望dp 你是否也有认为期望dp很玄学?我也是这么认为,或许当理解这些后,能觉得还行(?) 期望的线性性质:$ E(X+Y)=E(X)+E(Y) $ 为一切之根本 然后全期望公式 $E[X] =\sum_y E(E(X \mid Y)) $ 可以先看例子: 在一个条件下, X 的期望乘上这 阅读全文
posted @ 2025-07-25 20:20 daydreamer_zcxnb 阅读(74) 评论(0) 推荐(0)
摘要:线段树分治 T2: 线段树分治的是询问,把询问离线,然后线段树的每一个叶子节点为一个询问 把删边转化为加边,记录每一条边在哪些询问区间中加入进来过,例如 边x在 \(a_1...a_2,a_3...a_4,...\) 这些区间中加过 那我们依次将这些区间拆到线段树上,在线段树上的点加入当前的边 然后 阅读全文
posted @ 2025-07-25 09:03 daydreamer_zcxnb 阅读(9) 评论(0) 推荐(0)
摘要:算法理解 建议结合OIwiki和本人文字食用 本质上离线询问,然后对询问的答案进行二分,根据二分的结果(满足?/不满足?)对问题根据询问进行分治(类似于CDQ分治?),即对于所有的询问同时进行二分 T1: 考虑单个问题 \((x,y,k)\) 的 \(check\): 我们可以在序列的值域 \([l 阅读全文
posted @ 2025-07-24 18:35 daydreamer_zcxnb 阅读(16) 评论(0) 推荐(0)
摘要:写在前面 某位菜鸡花了半天的时间打完了树剖,又用了半天的时间di了无数个bug后,终于获得了MLE,RE并存的喜人成绩,最终在 \(ljc\) 大佬的指点下才发现原来是函数void写成int了并且没写返回值 T_T 正题 懒得自己写一篇博客了,就把我当时学习树剖时的一篇写的非常好的博客拿出来欣赏吧 阅读全文
posted @ 2025-07-21 13:05 daydreamer_zcxnb 阅读(38) 评论(0) 推荐(0)
摘要:算法理解 解决序列上的最值问题。 本质:把序列转化成二叉堆 序列上的编号用 \(id\) 表示,每个点的权值用 \(v\) 代替 对于一个最基本的二叉结构,\(fa\) 的左右儿子分别为 \(s1,s2\),遵循: $s1.id < fa.id < s2.id $ \(fa.v < s1.v,s2. 阅读全文
posted @ 2025-04-21 21:46 daydreamer_zcxnb 阅读(28) 评论(0) 推荐(1)
摘要:treap 首先每个点有键值和优先级 键值为节点本身的权值,优先级为每个节加入时所赋予的随机权值 对于树上一个节点左儿子的键值小于本节点的键值小于右节点的键值,对于键值来说是一颗二叉查找树 对于优先级来说一个节点的优先级要大于它的两个儿子的优先级,本质上是一个大根堆,用随机权值赋值是用来使深度接近l 阅读全文
posted @ 2025-02-13 20:35 daydreamer_zcxnb 阅读(43) 评论(1) 推荐(1)
摘要:扫描线 P5490【模板】扫描线 & 矩形面积并 (并非板子题 有人说它是板子题,但我认为它比二维数点复杂多了 首先考虑最暴力的暴力,我们暴力用矩形覆盖每一个点,然后再统计哪些点被覆盖了 然后我们采用二维数点的思想,对 \(x\) 一维进行从小到大模拟,这样对于 \(y\) 轴就是一个序列,当 \( 阅读全文
posted @ 2025-02-11 15:23 daydreamer_zcxnb 阅读(30) 评论(1) 推荐(1)
摘要:最大流 基本概念 原点s,汇点t,流量,容量 最大流问题原型:水渠问题,有一些水渠,由很多阀门连接,阀门控制水的流速,水渠内水单向流动,给定起点和终点,求最大流速 容量:每条边最大流速 流量:每条边水的流速 最大流:从s到t的最大流量 增广路:一条从s到t的可行路径 原理 每次找到一条增广路后就将整 阅读全文
posted @ 2025-02-05 07:27 daydreamer_zcxnb 阅读(48) 评论(0) 推荐(0)
摘要:一本通题解 T2: 再也不想碰这道题了。。。写了一下午。 我们先设状态 \(dp[i][j]\) 表示前i个刷匠,考虑了前 \(j\) 个木板后所获得的最大价值(\(j\) 个木板可以有空余)。 然后枚举前 \(i\) 个刷匠,枚举每一条木板。 对于一条木板可以此刷匠根本不刷,或不刷当前木板,状转方 阅读全文
posted @ 2025-01-18 14:37 daydreamer_zcxnb 阅读(39) 评论(0) 推荐(0)
摘要:状压dp 应用背景以集合为状态,集合一般可以用二进制表示,用二进制的位运算处理 集合问题一般是指数复杂度的,例如:1.子集问题,设n个元素没有先后关系,那么一共有 \(2^n\) 个子集;2.排列问题,对所有n个元素进行全排列,共有 \(n!\) 个排列 状态压缩:主要就是dp的一种状态,与dp转移 阅读全文
posted @ 2025-01-18 14:35 daydreamer_zcxnb 阅读(66) 评论(0) 推荐(0)
摘要:树形dp 树上做dp非常常见,因为树本身有子结构性质(树和子树) 一般解题思路:先把树转化为有根树(如果不连通的树,就加一个虚拟根,它连接所有孤立的树),然后在做dfs,递归到叶子节点,再一层层返回信息,就在这一步做dfs P2015 二叉苹果树 定义状态 \(dp[u][j]\) 表示以节点u为根 阅读全文
posted @ 2025-01-18 14:34 daydreamer_zcxnb 阅读(32) 评论(0) 推荐(0)