随笔分类 - 信竞
信息技术竞赛
摘要:链式前向星备忘 自以为比较好理解的一种写法 初始化 建边 遍历节点$x$连的边 参考 "链式前向星基本原理"
阅读全文
摘要:洛谷 P2015 二叉苹果树 (树上背包) 一道树形DP,本来因为是二叉,其实不需要用树上背包来干(其实即使是多叉也可以 "多叉转二叉" ),但是最近都刷树上背包的题,所以用了树上背包。 首先,定义状态$dp[x][i]$表示在节点$x$保留$i$个边所获得的最大苹果数,定义状态时一定要选对状态并且
阅读全文
摘要:洛谷 P2014 选课(树形背包) 思路 题面: "洛谷 P2014" 如题这种有依赖性的任务可以用一棵树表示,因为一个儿子要访问到就必须先访问到父亲。然后,本来本题所有树是森林(没有共同祖先),但是题中的节点$0$其实就可以当做一个LCA,从节点$0$开始dp。 状态定义:$dp[x][m]$x节
阅读全文
摘要:关于堆优化 传统$Dijkstra$,在选取中转站时,是遍历取当前最小距离节点,但是我们其实可以利用小根堆(STL的 )优化这个过程,从而大大降低复杂($O(V^2+E) O((V+E)lgV)$) 另外,需要注意,因为$Dijkstra$本质是贪心,每一次选择中转站必须保证最优,而负边权会使当前中
阅读全文
摘要:洛谷 P1273 有线电视网(树形背包) 干透一道题 题面: "洛谷 P1273" 本质就是个背包。这道题dp有点奇怪,最终答案并不是dp值,而是最后遍历寻找那个合法且最优的$i$作为答案。dp值存的是当前状态下的成本,所以合法情况即当成本值大于等于0,不亏本的时候。 因为dp维护的是成本,并且按照
阅读全文
摘要:DP 免费馅饼 HDU1176 "vjudge题面" 一道基本的DP题,状态转移很好想,每一个状态的位置$pos$都只能由上一秒的$pos 1, pos, pos+1$三个位置转移而来(当然要判断边界情况),这种简单的转移就直接写代码写死就行了,不需要像其他DP,还需要一个循环来专门决策。另外,这种
阅读全文
摘要:字典树入门 原理 将一个长度为$n$的单词,维护在一个$n$层的树中,每层存对应的字母;判断时,一层一层地判断,最后一层注意要还要判断这个节点是非曾作为为一个单词的终点(如存有abcd,判断abc) 实现 数据结构 结构体 为字典树节点, 表示该节点的儿子们所在的节点, 表示该节点是非层作为为一个单
阅读全文
摘要:榨取kkksc03 多维dp 题面: "洛谷 P1855 榨取kkksc03" 一道简单的动态规划,背包再加一维费用,首先可以易得三维动态规划转移方程 $$ dp[i][j][w]=\left\{ \begin{array}{} max(dp[i 1][j][w], dp[i 1][j a[i].m
阅读全文
摘要:种族并查集总结 原理 用于描述对象的属性具有传递性的关系,诸如:食物链、朋友的朋友是朋友,敌人的敌人是朋友这种东西 比如,我们可以开一个补集来存放某个对象的反面(如A的反面A',可以理解为A的反面的 招牌 ,所有是A的反面的元素都与它相连,归为它旗下),如果元素A与元素B的反面B'联通则说明元素A与
阅读全文
摘要:倍增 ST表 预处理 $f[i][j]$表示从$i$开始的 长度为$2^{j}$ 的区间(即区间$[i, i+2^{j} 1]$) 递推公式(j在外层递增): $f[i][j]=max\{f[i][j 1], f[i+2^{j 1}][j 1]\}$ 即将区间$[l, r]$分为两个区间合并 查询
阅读全文
摘要:求最大公因数(辗转相除法&更相减损术) 辗转相除法 又名欧几里得算法 ,其原理其实是基于这个定理:$gcd(a,b)=gcd(b,a\%b)$, "详细证明" ,而任何数与0的最大公约数是它本身 (递归终止条件),所以可以如下递归求出两数最大公因数: $$ f(a,b)=\left\{ \begin
阅读全文
摘要:二分图匹配(匈牙利算法) 二分图 如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图 原理 线性安排,不管是不是最优解,先安排着,如果后续无法匹配了再递归调整前面已经匹配好了的,最终肯定是 最大匹配 。匈牙利算法其实就是一个利用递归 先假设匹配再不断反悔重新匹配的过程 ,很好
阅读全文
摘要:二分答案 使用场景 如果答案具有单调性且有范围,那么就可以二分枚举答案,在答案合法的条件下 不断逼近最优 (如最大值最小或最小值最大),最后一个合法的答案就是最优解,这便是二分答案 板子 整数域上的二分 最后while结束后,ans便是最后一个合法的答案即最优解 另一种写法: 为精度,一般需要保留k
阅读全文
摘要:Tarjan打包总结(求强连通分量、割点和Tarjan LCA) 写给自己的Tarjan算法总结,包括求强连通分量、割点和Tarjan LCA,基础概念就没有废话了,只写自己的理解和板子 [TOC] 强连通分量&缩点 原理 在DFS生成树中,如果一个节点通过其所有子节点的返祖边恰能达到这个节点,那么
阅读全文
摘要:树状数组入门乱讲 rt 不同于传统数组每个元素单独存放,求和时遍历相加,树状数组 每个元素不单独维护,而是被维护在一个包含其他元素的前缀和里 。宜先仔细揣摩后再行。 上图便体现了树状数组储存数据的原理 相当于以下等式 说明:C[]是树状数组,A[]是实际元素 C[1]=A[1]; C[2]=A[1]
阅读全文
摘要:博弈论总结 本文在 "混沌 的博客 题解 P2252 【取石子游戏】" 的基础上创作 巴什博奕(Bash Game) A和B一块报数,每人每次报最少1个,最多报4个,看谁先报到30。这应该是最古老的关于巴什博奕的游戏了吧。 其实如果知道原理,这游戏一点运气成分都没有,只和先手后手有关,比如第一次报数
阅读全文
摘要:深入理解非递归快速幂 按 网络上很多博客都只有板子,并没有严谨详细探讨其思想。本篇文章将从 二进制角度 来深入理解 非递归 快速幂 原理 先举个栗子,求 $3^{15}$ 。对于 $3^{15}$ 我们可以通过数学幂的运算法则得到下面的式子 $$ 3^{17}=3^{2^{4}+2^{0}}=3^{
阅读全文
摘要:离散化 使用场景&思路 当需要把一个数据范围很大,但是元素个数较少的集合映射到数组下标上时,因为计算机内存的限制,数组下标不可能完全包含这极大的数据范围,所以我们需要将其(排序后)重新顺序标号。 至于离散后数据的具体值,很多时候我们不需要关心,我们只需要知道他们之间相对的大小(这时可以排序后再离散化
阅读全文
摘要:能量项链 (区间DP) 问题引入 "能量项链 洛谷 P1063" 思路 诸如此类不能线性规划的问题要用到区间DP,区间DP一般就是三层循环,第一层表示区间长度(本题即$n$),第二层枚举起点并根据第一层区间长度算出区间终点,第三层便在当前区间内枚举决策(即哪两个合并) 本题由于是环,还需破环为列,可
阅读全文
摘要:分块简单入门 按 树状数组虽超级快,但是很僵硬,不灵活;线段树虽快,但是却不直观,代码量大;所以,速度较慢但直观形象、代码量小的分块大法不实为线段树的替代品。 网络上关于分块的教程不知道为什么很少,虽然早有hzwer大神的 "分块九讲" ,但是还是少了入门级详解教程。此篇将分为三个阶段,保证初学者在
阅读全文

浙公网安备 33010602011771号