自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(290)
  • 收藏
  • 关注

原创 状态压缩 —— 题型全归纳,超多例题,万字详解。

状态压缩 bfs/dfs/最短路、状态压缩DP,题型全归纳,一篇文章学会状态压缩!

2022-04-15 23:10:53 1088 1

原创 树形dp解决:《节点x选了,其相邻节点选不选问题》

前言:这种 节点x是否挑选对其相邻节点有影响的问题 在树中也很常见,下面是几个经典例题,让我们一起来学习掌握它吧!文章目录例一、没有上司的舞会题意:分析:Code:例二、战略游戏题意:分析:Code:例一、没有上司的舞会题意:原题题意:每个人都有上司,他们之间的关系构成了一棵树。父节点是子节点的直接上司。每个节点有权值 wiw_iwi​。先要挑出若干个人参加舞会,每个人都不愿和直接上司一起。问,如何选择能够使得总权值最大?简化题意:一棵树,每个节点有权值 wiw_iwi​。要求每条边

2022-03-25 21:15:12 1360

原创 经典问题《树的直径》与《树的中心》,详解。

1、定义树的直径: 树上最远的两个节点之间的距离。连接这两点的路径被称为树的最长链。2、如何求出一棵树的直径呢?将任意点看作根节点。对于节点 x 来说:如果最长链在以节点 x 为根的子树中,并且经过节点 x,那么最长链的长度就是从节点 x 到最底端的两个最长路径距离之和。容易想到,最长链一定在一个节点为根的子树中,并且经过该节点,所以我们只需要在所有节点下,找出每个点到最底端的最长的两个距离,维护两个距离和的最大值即可。最终的最大值便是这棵树的直径。从根节点出发,我们可以 dfs 维

2022-03-18 18:27:02 2624 1

原创 Floyd 求解《最小环问题》,原理详解。

用最简单易懂的思路帮你搞懂《最小环问题》!

2022-03-11 17:21:50 1895 6

原创 ST算法 - RMQ(区间最值问题)—— 倍增

带你深入理解 ST算法 的本质——倍增。

2021-10-15 10:06:17 1183

原创 倒序并查集 —— 逆向思维

题目模型:给出n个点,m条边。k次操作,每次删掉一个点及与其相连的边,给出若干个数对(x,y),问 点x 和 点y 是否在同一连通块中?暴力做法:对于每个数对都跑一遍bfs,超时。需要用并查集。如果按照给出的顺序删点的话,这个点倒是删了,那这个连通块如何更新呢?就没法搞了。想象一下两种状态。一种状态为:正着来删点。原来所有点都没删,然后进行过k-1次操作之后,仅剩最后一个删点没有删,询问两个点x,y是否在同一连通块中。另一种状态为:倒着来加点。连边时,删点不要参与连边。然后加入最后一个操

2021-10-14 21:41:29 1107

原创 背包问题 模板详解!

一、01背包题目描述:有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi 。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。每件物品只能 不选0,或者选一次1,所以叫做01背包。(好生动 QwQ)—————朴素做法:1、状态表示:f[i][j]表示从前i个物品中选,总体积不超过j的最大价值;2、属性: 最大值;3、状态转移:用“最后一步”来划分:当前物品“选不选”:不选当前物品,那么当.

2021-10-14 20:49:51 1846 1

原创 分层图最短路

今天遇到了一个分层图最短路,虽然是模板题,但是之前没学过,所以来现学一下。什么是分层图?分层图最短路模型:对于一个n个点,m条边的无向图,每条边长度为 wi,求两点间的最短距离。但是有 k 次特权,每次可以将当前边的长度变为 0 (或其他)。在使用不超过 k 次特权的情况下,求两点间的最短距离?遇到这样将边的大小改变的模型,可以构建分层图模型,然后跑最短路。分层图就是把当前点复制几个,放到对应点的下方。有k次特权,就构建k+1层,从当前层连向下一层的边为0,也就是使用了一次特权。最后取这

2021-10-06 22:28:34 606

原创 汇总 前缀和 & 差分 的高端操作~

本以为前缀和就是求个前缀数组,然而这几天发现了 前缀和 的另外一些重要性质,解决了许多棘手的问题!在这里汇总一下。

2021-08-28 10:55:20 1400 2

原创 二叉树——根据 中序 和 层序 建树,超详讲解。

模板题传送背景:树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,请构建这棵二叉树。正文:总体思路:与根据先序和中序建树相类似,都是由递归来实现。根据层序遍历的特点,层序序列中第一个元素就是根节点root。确定该节点在中序序列中的位置。则该位置左边的都是左子树,右边都是右子树。左子树的根节点就是root的左孩子,右子树的根节点就是root的右孩子。递

2021-05-20 22:20:04 6226 7

原创 二叉树——根据先序(后序)、中序 建树,超详讲解。

先中和后中的思路相同,这里先以先中举例:思路:通过递归,不断压缩中序和先序序列的长度,从而确定左右子树。根据先序排列的性质,第一个数则是这个序列中所有点的根节点root。确定通过map数组确定该点在中序序列中的位置k。...

2021-05-19 22:25:18 29806 7

原创 floyd——记录路径,原理详解。

Floyd如何记录最短路的路径并输出呢?

2021-05-18 21:27:18 5913 11

原创 双端队列_01bfs——附详解典例

我感觉这个算法是作为 dijkstra 等求最短路的优秀替换!时间复杂度可以降到O(m)!原理:如果边权只是0和1的话,启用优先队列未免太浪费资源了!这里用双端队列正是对这个地方的优化,将优先队列O(logn)的时间复杂度降到了O(1)!!过程是这样的:从起点开始,加入队列。while队列非空,取队首元素,用这个节点更新其他节点。如果可以更新的话:1、边权为0,放到队首。(从边权为0......

2021-05-15 22:31:35 9514 15

原创 二分查找 & 二分答案 万字详解,超多例题,带你学透二分。

很多人对二分很困惑,可能二分的边界很难掌握,也许是判断条件难写... 很幸运,你找到了这篇文章,仔细看下去,这篇文章将带你**学透二分**!!!

2021-03-17 17:34:55 97056 168

原创 前缀和&差分 精讲(一维、二维、附例题!)

这篇文章是我寻找众多博客总结归纳的,还有找到的部分经典例题,相信看完的你一定会有新的感悟!加油!一、一维前缀和一维的前缀和数组sum[ i ]就是存的是 前i个数的总和 。那么x到y区间的总和就是 sum[ y ] - sum[ x ]应用:1、求一个数前面的所有数的和:递推;2、求较多区间( l , r )之间的数的和:求前缀和之后 ans=a[r]-a[l-1];例:HJ浇花、color the ball;3、多组数据,每组数据都用同一总数组来操作,如果一组数据一组数据遍历的话很容易

2021-02-01 11:28:40 1399

原创 JAX、Flax 和 PyTorch 之间的类比关系

JAX和PyTorch 的张量计算部分是同一类型,都是底层计算工具。Flax和PyTorch 的神经网络模块是同一类型,都是高层神经网络框架。PyTorch是一个完整的深度学习框架,而JAX + Flax是一个组合,需要用户根据需要整合工具。

2025-04-05 10:58:29 838

原创 vscode + git 进行代码管理(光速入门教程!)

快速入门 git,配合使用 vscode 方便可视化操作,快速上手,半天学会 git 基础操作!

2025-03-23 17:27:25 2004

原创 Zotero + 坚果云实现文件同步

当文件被拖入 zotero 时,会在本地创建一个把拖拽的 pdf 复制一份,存到自己的 storage 目录下,之后 zotero 只对这个复制的 pdf 操作,原本的 pdf 不受影响。因为已经创建了新的文件同步位置,所以可以将 zotero 账号中的之前附件的存储空间进行清空。原来是 zotero 只给了 300M 免费空间来存储文件,向 zotero 导入更多文件的时候就存储不下了。这样我们就能同步文件的时候,将笔记数据同步到zotero账号,将附件文件同步到坚果云。

2025-03-18 13:30:41 586

原创 大模型训练——pycharm连接实验室服务器

我们在运行或者复现大佬论文代码的时候,笔记本的算力不够,需要使用实验室的服务器进行运行。可以直接在服务器的终端上执行,但是这样的话代码调试就不方便。而我们可以使用 pycharm 连接到服务器,既方便了代码调试,又可以使用服务器的 gpu 进行训练。在服务器上创建一个空白文件夹,将 github 上的代码拉取到这个文件夹中。在主机上创建一个文件夹,将 github 上的代码下载到这个文件夹中。为服务器管理员为自己添加的账号名;有的话就选择已有的,没有添加过就点。一般为服务器的 ip 地址号,

2025-02-26 17:32:58 685

原创 机器人控制系统 ROS2 学习笔记

赵虚左老师 《ROS2 理论与实践》课程笔记,ROS2 基础知识

2024-12-02 15:56:57 1218

原创 【moveit2 教程解析】(二)在 RViz 中实现可视化

moveit2官方教程详细解释,Moveit2环境:Ubuntu22.04 + ROS2 Humble

2024-12-02 15:20:04 1110

原创 【moveit2 教程解析】(一)第一个 C++ Moveit 程序

moveit2官方教程详细解释,Moveit2环境:Ubuntu22.04 + ROS2 Humble

2024-12-02 15:11:47 1704 2

原创 深度学习工具 Anaconda、conda、CUDA、cuDNN、pytorch、Cuda Toolkit 解释

深度学习工具 Anaconda、conda、CUDA、cuDNN、pytorch、Cuda Toolkit 解释

2024-11-04 08:20:13 1075 2

原创 cuda 版本选对了,为什么 torch.cuda.is_available() 仍返回 False?

完美解决 torch.cuda.is_available() 仍返回 False,因为你的 pytorch 被迫下载成了 cpu 版本。

2024-11-02 21:06:55 1562 1

原创 【指针】链表操作中的指针到底有什么用?

节点与指向节点的指针有何关系?为什么非要定义指向节点的指针,而不是直接创建节点呢?

2024-05-22 22:51:59 526 1

原创 单调栈 & 单调队列 专题

上述操作通过维护单调递增栈,求出了数列中每个数左边第一个比它小的数。同理可以维护单调递减栈,求出数列中每个数左边第一个比它大的数。将枚举顺序转换,从后往前枚举,便能求出数列中每个数右边第一个比它小/大的数。求区间最小值,维护单调递增栈;求区间最大值,维护单调递减栈。把原理搞懂,能够用代码实现之后,这两种算法就掌握了。在以后的题目中,如果需要求每个位置左边/右边第一个比其大/小的元素,就要想到用单调栈;如果需要维护一个移动区间的最值,用单调队列O(n)O(n)O(n)

2023-01-05 12:23:36 1647

原创 Perfect Flush(栈,贪心)

在这种判断方式下,所有拿过的数只会被判断一次,O(n),并且保证了所拿子序列字典序最小。但是如果对于每个位置都遍历之前拿过的数,复杂度是 O(n^2),需要优化。找到字典序最小的子序列,使得 1 ~ m 中的所有数出现且仅出现一次。保证对于 1 ~ m 中的所有数都会出现在这个数组中至少一次。可以用一个栈来实现上述判断,栈中依次存放要拿的子序列中的数。代码很简单,但是想清楚思路还是要花点时间的。从前往后对于每个位置来说,假设当前位置。判断了之前拿过的数,到当前位置。最终栈中元素就是所选子序列元素。

2023-01-03 17:48:46 670

原创 22湖北省赛 - J. Palindrome Reversion(回文,哈希拼接)

另外这道题场上的时候是想到第一种做法的,但是还是犯了上次网络赛的那个错误,有了思路没试样例就直接去写了,写完之后发现第二个样例过不去,然后就觉得自己的思路有问题,加上这道题过的人少,就觉得自己的思路不对,没有这么简单。其实第二个样例本应该是对的,只不过有点特殊,但是思路是对的,而写的时候 r 和 n 混用了,导致第二个样例没对,但是我却以为是思路问题,就没有继续往下想。如果一开始有思路的时候先看一下这个样例,发现也是能用这个思路做的,后面写挂的时候也知道自己写的有问题,而不是怀疑思路,直接不去想了!

2022-10-29 11:44:45 1121 1

原创 J. Taotao Picks Apples(单调栈, 离线 / RMQ, 二分)

把对于每个位置的询问修改后的值以及询问编号都挂到每个位置下面,从后往前维护单调递减栈,每次询问后面所有位置中第一个大于 y 的值,就可以二分单调栈中的所有位置,找到第一个大于 y 的值所在位置。但是少考虑了一种情况,就是原来这个位置的值比前面最大值大,那么原数组中该位置是拿的,但是现在修改之后该位置不拿了,所以就要重新计算答案。但这种思路是错的,维护前面的时候可以继承上一位置的状态,但是维护后面的就不能继承后一位置的状态,因为是从前往后拿的,当前位置拿了后面就要找第一个大于当前值的位置,从这个位置来转移。

2022-10-25 11:42:30 440

原创 CF- Sheikh(思维,异或,位运算)

所以,干脆二重循环遍历前 31 个非零数,后 31 个非零数,把这些位置作为子区间的左右端点,看区间价值是否是最佳价值,取所有子区间长度的最小值。当且仅当 x 的二进制表示中所有 1 所在位置在 y 二进制表示中都是 0,这样 x 的每一位都有贡献,那么异或的贡献就和加法的贡献一样。这题场上一点思路都没有,想着要选一段区间,既要让 sum 尽可能大,又让 xor 尽可能小,让两者之差尽可能大,没有想法。如果区间最左端或者最右端的一些数没有贡献的话,可以把这些位置删掉,把区间缩短。还是不太好想的,多思考吧。

2022-10-24 17:08:09 406

原创 CF - D. Counting Arrays(gcd)

给定 n,m,问如果 a[i] 的范围为 1~m 的话,对于数组长度 1~n,满足至少有两个删除序列的数组一共有多少个?也就是说,能构造出多少至少有两种删除方案的数组?选择 n 次位置编号将整个数列的所有位置删除,选择的 n 个位置编号构成删除序列。用总的数组数减去只有一种删除方案的数组数便是至少有两种删除方案的数组数。种,把所有位置能放的种类乘起来,便是满足只有一种删除方案的数组个数。的话,那么第 i 个位置可以删除,后面的位置往前移动一个位置。的,而且每次删掉第一个位置,后面的位置前移之后,仍然满足。

2022-10-22 11:28:44 813 1

原创 CF - C. Number Game(思维,博弈)

一开始想的是,假设当前 Alice 要删掉 ≤ k 的数,她肯定会删掉剩下的数中小于等于 k 的最大的数,把较小的数剩下留着下面的轮次再删(因为下面轮次要删的数会更小)。然后就想,Bob 会阻止 Alice 执行 k 轮,那么 Bob 就要操作她下一轮能够删掉的数(小于等于 k-1 的最大的数),让她下一轮操作不了,那她就输。那么,如果 k 大于数列中 1 的个数 cnt 的话,所有的 1 都会被 Bob 搞掉,Alice 最后一轮无法操作,必输。,那么 Alice 最后无论如何都不能赢。

2022-10-21 23:50:15 673 2

原创 acw - 4623. 买糖果(思维,取模折半)

一开始的是这样想的,如果有一轮走到某个位置发现这个位置拿不了,那么后面所有轮这个位置都拿不了,那么这个位置就可以删掉。T 很大,每次肯定要除以每轮的花费,看能进行多少次这样的轮,如果这一轮进行不了了,那么就删掉拿不了的那些位置,把剩下的花费加起来,再看能跑多少轮。然后就想,这样最坏情况下每次遍历删掉一个位置,而一共 2e5 个位置,岂不是要遍历 2e5 次?每遍历一次,对于没删掉的位置作为一轮,看能够进行了多少轮,然后 T 减去这些轮的花费。所以,T % sum 之后,至少变为原来的 1/2。

2022-10-21 21:07:36 470

原创 22河南省赛 - E. Serval 的俳句(预处理)

还有一种思路是,边走边记录每个字符出现的次数,如果有一个字符出现 5 次了,那么就满足了,清空次数重新记录,然后找首个出现 7 次的字符作为第二种 …首先遍历第一种字符,然后找到最前面的 5 个,然后遍历第二种字符,找到最前面的 7 个,然后遍历第三种字符,找到最前面的 5 个。每次都贪心找最前面满足的,给后面的字符尽量留更多的位置。这样每次找到的也是最前面满足的,满足贪心。输出一个满足的子序列。这题的思路来源于前几天模拟的一场。

2022-10-19 23:58:29 358

原创 22河南省赛 - J. Mex Tree(LCA,MEX)

连通块中所有点的权值的 MEX 恰好为 k,也就是说连通块中至少要出现权值为 1~k-1 的 k-1 个点,并且权值为 k 的节点不在连通块中。对于 k = 0, 1, 2,…, n,找到最大的连通块使得其中所有点权值的 MEX 恰好为 k,输出最大满足的连通块大小。需要注意的是,k = 0 时不需要满足所有小于 k 的节点都在连通块中,所以取该节点上部和下部连通块的最大值作为答案。给定 n 个节点的树,每个节点编号为 1, 2, 3, …, n,第 i 个点的权值为。场上做出来了,很激动~

2022-10-19 23:40:06 336

原创 22 河南省赛 - H.旋转水管(暴搜)

因为标记每个位置的时候带上了方向,可能有一种路径从一个方向经过了点 (x,y) 旋转了一次管子,后面转一圈回来又经过了这个位置,又旋转了一次管子,这种情况是非法的。从起点并不能到达 (1,1),但是经过 (1,2),(2,2),(2,3)…(1,4),(1,3) 之后,又旋转了一次 (1,2) 就能到达 (1,1) 了,是不合法的。所以需要像平常的 DFS 一样,记录路径,标记从起点到当前点路径上的所有点,不能重复经过,走不通时再。问,能否有一个旋转方案使得从起点流出的水经过管子流向终点?

2022-10-19 21:39:27 601 1

原创 D. Paths on the Tree(树形dp)

一共 k 条路径,那么根节点 1 就被经过了 k 次,为了让总价值最大,并且满足兄弟节点被经过次数之差不超过 1,假设根节点有 cnt 个儿子,那么每个儿子初始要被经过 k/cnt 次,还有 k%cnt 个儿子多经过一次。如果一个儿子多经过一次之后,相比于原来得到的增量最大,那么这个儿子要被多经过一次。,这里只是额外多经过一次,也就是取模之后剩余的多了一个。根节点经过 k 次,那么所有节点至少被经过的次数就被确定了,假设为。次之后,以该节点为根的子树得到的最大价值。个儿子,因为儿子至少经过的次数是。

2022-10-16 21:49:54 673

原创 CF #781 - C. Tree Infection(贪心,二分)

除了第一秒,每次指定感染都能扩散感染一个节点,所以指定感染 x 次的话,就能扩散感染 x-1 个,sum 减去 x-1,然后对于剩下没感染的节点,每一秒钟可以感染两个,花费除 2 上取整秒。而现在每次操作 1 都可以作用于每个节点块,也就是说,假设一共有 x 个节点块,对于第 i 个进行指定感染的节点块,在 x 个节点块都被指定感染过之后,可以扩散感染 x - i 次。而 x 个节点块是肯定要指定感染的,就相当于第 i 个进行指定感染的节点块可以免费扩散感染 x-i 个节点。给定一棵树,根节点为 1。

2022-10-14 22:39:44 458

原创 明月计划第 1 弹 - 牛客月赛57

一开始看到这道题的时候,根据以往做 gcd 类型题目的经验,肯定和质数相关,然后就想着先分解质因数,1e6大小正好,但是分解完之后呢?从一个点出发,不能走到相邻的 2k 个位置,但是如果能走到一个位置的话,除了那个位置相邻的 2k 个位置之外,其余所有位置都能到达。而所有数的大小都在 1e6,那么就可以枚举 1-1e6 所有数作为公约数,然后再验证数列中是否存在两个数的公约数是这个数。现在给出 n,k,a,b,判断能否可以从 a 层到达 b 层?最大公约数,真就是纯粹的找出最大的那个公约数,确实没想到。

2022-10-14 00:49:57 391

原创 acw - 4626. 最小移动距离(基环树,gcd)

那么如果存在一个树挂到环上的情况(如上图左边的基环树),树上的点一旦进入环中就不可能再出来,所以树上的点 x 走任何步到达一个目标点,目标点都不可能再走到 x,无解。要时刻牢记,n 个点 n-1 条边的连通图是一棵树,n 个点 n 条边的连通图是基环树。而 n 个点,每个点都有且只有一个出度,那么是一个基环树,并且环上挂的树都指向环上节点。那么有解的情况就是图中只存在若干个环,并且在基环树森林中,这些环一定都是各不相交的。,一共 n 个点 n 个点,那么说明这个图是基环树或者不连通的基环树森林。

2022-10-13 14:02:05 530

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除