随笔分类 -  小技巧/刷题心得

摘要:小技巧—对树中叶子节点的记录 叶子节点的定义是树中除根节点外度数为1的节点。 对叶子节点的记录可以从两方面入手。第一个就是定义,找到度数为1的点都打上叶子标记即可。 第二种是延伸定义,叶子节点是没有儿子的节点... 所以对于加入节点的时候,如果它成为爹了,就打上标记,然后所有没打标记的就是叶子节点。 阅读全文
posted @ 2020-10-30 17:59 Seaway-Fu 阅读(257) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2020-10-28 21:01 Seaway-Fu 阅读(3) 评论(0) 推荐(0)
摘要:刷题心得—各种存图方式的比较 首先是喜闻乐见的链式前向星存图。 然后是vector存图。 之后是最容易理解但是最不能用的邻接矩阵存图。 比较一下各个存图方式的优缺点。 邻接矩阵存图就是费空间。其只能支撑千以内的二维开销。 链式前向星存图比较万能,所以一直在用它。 vector存图在有些题目中有大用, 阅读全文
posted @ 2020-10-27 15:10 Seaway-Fu 阅读(257) 评论(0) 推荐(0)
摘要:小技巧—找环 给一棵基环树,如何找环? 对于无向基环树,找环可以用拓扑。 因为是无向,所以拓扑入队的条件变成度为1。拓扑结束之后,所有入度大于1的全是在环上的点。这个可以手画验证。 另外值得一提的是,这种无向图找环的方式只适用于基环树,也就是无向连通图且只有一个环。如果环多了的话,会漏掉很多点。 阅读全文
posted @ 2020-10-27 14:58 Seaway-Fu 阅读(770) 评论(0) 推荐(1)
摘要:CSP-S2020/NOIP2020模板总结 一、算法 二分写法 while(l<=r) { int mid=(l+r)>>1; if(check(mid)) { l=mid+1; ans=mid; } else r=mid-1; } 洛谷2884 离散化 UVA10587 归并排序 void me 阅读全文
posted @ 2020-10-26 16:44 Seaway-Fu 阅读(272) 评论(3) 推荐(1)
摘要:CSP-S2020/NOIP2020复习指南 一、算法 模拟 贪心 暴力枚举 搜索-DFS 搜索-BFS 搜索-剪枝 搜索-记忆化搜索 搜索-迭代加深 高精度 递推 倍增-递推倍增 倍增-树上倍增 二分-二分查找 二分-二分答案 离散化 分治 排序-sort快排 排序-归并排序 差分-线性差分 差分 阅读全文
posted @ 2020-10-26 16:22 Seaway-Fu 阅读(245) 评论(1) 推荐(0)
摘要:小技巧—挂链 所谓挂链,顾名思义就是分类排队。 类比一下,现在JLOI要排队。 特派员大喊:神站成一队!于是QYB出来和其他神犇们站成了一队。 特派员又大喊:大犇站成一队!于是JZW出来和其他犇犇站成了一队。 特派员再大喊:菜狗站成一队!于是FSW自己站成了一队。 这样就相当于把OIer们分成了神! 阅读全文
posted @ 2020-10-23 18:40 Seaway-Fu 阅读(269) 评论(0) 推荐(0)
摘要:刷题心得—拓扑序在图上DP中的应用 参考CF721C Journey这道题。一道图上DP。DAG上DP。这个题目需要用到拓扑排序。如果不拓扑排序,直接在一个入度为0的点进去开始按边走转移,会出现错误。 为什么呢? 我们知道,DP是分阶段的。这个阶段的划分在转移的设计中显得至关重要。那么相对于线性DP 阅读全文
posted @ 2020-10-23 18:36 Seaway-Fu 阅读(391) 评论(0) 推荐(0)
摘要:小技巧—有向图双向存边 现在给你一个有向图,操作中有边的反转,怎么办。 可以把双向边建出来,打上标记: $(u,v,0),(v,u,1)$表示是否需要反转这条边。 阅读全文
posted @ 2020-10-22 10:07 Seaway-Fu 阅读(432) 评论(0) 推荐(0)
摘要:小技巧—DP的填表法和刷表法 觉得挺有趣的,简单过来介绍一下这两个名词。 填表法就是在DP转移过程中,每个状态是由它前面的状态推导而来。 刷表法,就是在DP转移过程中,每个状态产生其他的新状态。 如何理解? 填表就是由谁而来,刷表是向下推进——llq 嗯嗯,至理。 一般来讲,这只是DP的两种实现方式 阅读全文
posted @ 2020-10-16 09:29 Seaway-Fu 阅读(1071) 评论(1) 推荐(1)
摘要:小技巧—处理环形区间 比如经典的约瑟夫问题等问题。 很多问题的区间是环形的。即,1号点和n号点是相连的。可以作为相邻节点来操作。 芜湖?怎么办? 办法是:选择任意一个位置断开,复制形成二倍长度的链 在很多问题中,一般都是直接把区间复制到后面,1连n. 这个任意位置,以后还会大有研究。 先这样(逃 阅读全文
posted @ 2020-10-13 11:21 Seaway-Fu 阅读(159) 评论(0) 推荐(0)
摘要:小技巧—判断浮点数相等 实数域二分的判停条件是:l-r<=eps eps是预定精度。 这里的话,很多同学(包括本蒟蒻)就会自然而然地认为这个就是判浮点数是否相等的。 实则不是。 由于浮点数的精度误差,这样的判断方法不是很科学,显得非常简单。 那么复杂科学的判断方式是什么呢? 是这样: \[ \fra 阅读全文
posted @ 2020-10-10 19:31 Seaway-Fu 阅读(514) 评论(0) 推荐(0)
摘要:小技巧—对拍和输出文件的比较 在出题或对拍的时候,有的时候需要比较自己认为的标程和实际的暴力标准程序的输出结果是否一致。 这时需要使用命令提示符内置的比较文件的命令。 Windows下是fc 文件名1 文件名2 参数 关于参数,可以往里敲 fc /? 来查询。 然后会返回给你比较结果。 Linux下 阅读全文
posted @ 2020-10-09 17:07 Seaway-Fu 阅读(174) 评论(0) 推荐(0)
摘要:小技巧—双向边快速枚举 在与图有关的题中,我们可能会建立双向边。那么如果我们想要对这条双向边(也就是两条有向边)同时做操作。咋整? 第一种方法:从2开始存边的编号,然后异或1即可。 第二种方法:新开数组记录双向边编号是谁。 第三种方法:直接暴力再开个循环判一下。(它死了 着重讲解一下第一种方法,也是 阅读全文
posted @ 2020-09-30 19:47 Seaway-Fu 阅读(160) 评论(0) 推荐(0)
摘要:小技巧—指数形式的枚举 指数形式的枚举一般使用递归来实现。 通常,求一个集合的全组合(也就是全部子集)的时候,常用指数型枚举。 原理很简单,每层递归只有两个分支:选还是不选。 然后对于每次到达递归出口的时候,对当前的组合判断一下合不合法即可。 对于回溯来讲,可以使用各种STL实现(反正都是暴力,不用 阅读全文
posted @ 2020-09-30 15:59 Seaway-Fu 阅读(198) 评论(0) 推荐(0)
摘要:小技巧—滚动数组 滚动数组是常见的一种空间优化方式。 应用是递推算法,动态规划(其实现方式是递推)。 举个栗子: 斐波那契数列是递推的一个最好的例子,它的递推公式是: \[ fib_n=fib_{n-1}+fib_{n-2} \] 也就是说,我们只需要知道n-1和n-2项就能知道第n项,第n项跟前面 阅读全文
posted @ 2020-09-30 13:36 Seaway-Fu 阅读(2580) 评论(0) 推荐(2)
摘要:刷题心得—背包问题的枚举方式 以0/1背包为例,到底正序枚举还是倒序枚举? 正序枚举还是倒叙枚举的原则取决于0/1背包的性质,即一个阶段的状态(1个物品)不能被放进背包两次。如果正序枚举的话,当前阶段被上一个阶段更新,而下一个阶段仍然可能被上一个阶段更新。多以就相当于一个物品被放进了背包两次。违背0 阅读全文
posted @ 2020-09-30 11:20 Seaway-Fu 阅读(458) 评论(0) 推荐(0)
摘要:小技巧—对于深搜森林的处理 所谓森林(请读者收起邪恶的笑容),就是很多棵互相独立的树。是一张不连通的图,其中每个连通块都是一个树。 所以我们发现,如果对这张图进行遍历的话,要先记录每个树的根节点,然后才可行。 感觉很麻烦很耗时。 怎么办呢? 新建一个0节点为所有树根的父亲,相当于一个虚的节点把所有节 阅读全文
posted @ 2020-09-30 09:19 Seaway-Fu 阅读(172) 评论(0) 推荐(0)
摘要:小技巧—DP过程中序列的记录 一道例题: CF10D LCIS 求最长公共上升子序列的题。算是比较基础和经典的DP题目。 但是这道题目为什么是蓝了呢。。。可能就是因为它还需要维护一个序列的记录。 怎么维护呢? 我们开一个$pre$数组,表示当前状态的前一个位置是什么。即当前状态是由哪个状态新转移过来 阅读全文
posted @ 2020-09-28 11:17 Seaway-Fu 阅读(173) 评论(0) 推荐(0)
摘要:小技巧—边权转点权 很多算法,比如树链剖分,是在点权上进行计算和统计的。 详解树链剖分 但是有些题会比较狗,只给你边权。 这时就要想办法把边权转为点权。 以一棵树为例。边权转点权一般是把边权转为深度较深的节点(也就是儿子节点)的点权。 这么做很好理解,因为对于一棵树来讲,一个点有很多个儿子(出边), 阅读全文
posted @ 2020-09-24 14:28 Seaway-Fu 阅读(926) 评论(0) 推荐(0)