- 博客(967)
- 资源 (19)
- 收藏
- 关注
原创 洛谷 P7771:【模板】欧拉路径
图中经过所有边恰好一次的路径称为欧拉路径(也就是一笔画)。如果此路径的起点和终点相同,则称其为欧拉回路。注意:若存在欧拉回路,则一定存在欧拉路径。
2024-07-28 19:49:05 518
原创 AcWing 4216:图中的环 ← 快读+并查集
● 基环树:https://blog.csdn.net/hnjzsyjyj/article/details/140730215● 快读:https://blog.csdn.net/hnjzsyjyj/article/details/120131534● 并查集:https://blog.csdn.net/hnjzsyjyj/article/details/120147618
2024-07-27 23:15:35 308
原创 基环树简介
● 众所周知,树上没有环。一棵树由 n 个结点及 n−1 条边构成。● 基环树是由 n 个结点及 n 条边组成的连通图。显然,基环树上存在环。因此,基环树本质上不是树,而是图。基环树又称章鱼图。基环树的的特别之处就在于这个环,因此,大部分基环树题目中,找环是十分必要的。
2024-07-27 09:29:43 151
原创 洛谷 P8655:发现环 ← 基环树模板题
● 众所周知,树上没有环。一棵树由 n 个结点及 n−1 条边构成。●基环树是由 n 个结点及 n 条边组成的连通图。显然,基环树上存在环。因此,基环树本质上不是树,而是图。基环树又称章鱼图。基环树的的特别之处就在于这个环,因此,大部分基环树题目中,找环是十分必要的。
2024-07-27 00:02:38 499
原创 AcWing 1080:骑士 ← 树形DP+基环树
环形结构上的动态规划问题,是一种特殊的区间动态规划问题。由于存在“环形后效性”,所以不满足动态规划算法的“无后效性”约束条件。故常将环形结构上的动态规划问题,通过“断环为链”策略转化为线性动态规划问题求解。所谓“无后效性”,即“未来与过去无关”。所谓“断环为链”策略,即“把环断开为链,然后复制一倍接在末尾”。
2024-07-25 21:18:57 809
原创 洛谷 P2661:信息传递 ← 树形DP+拓扑排序+dfs
● 链式前向星:https://blog.csdn.net/hnjzsyjyj/article/details/139369904
2024-07-25 15:32:06 370
原创 洛谷 P1068 [NOIP2009 普及组 T2]:分数线划定
● 按结构体某一字段对结构体数组进行排序:https://blog.csdn.net/hnjzsyjyj/article/details/120184972
2024-07-19 09:42:09 362
原创 洛谷 P1058 [NOIP2008 普及组 T4]:立体图 ← 字符串、坐标变换
●解题思路:先把“积木形式”存在数组中,然后按照“从下往上,从后往前,从左往右”的顺序依次覆盖,之后输出即可。覆盖顺序来源于实际的模拟。
2024-07-18 22:34:42 367
原创 洛谷 P1057 [NOIP2008 普及组 T3]:传球游戏 ← 环形DP
不妨设小蛮为 0 号,所有人的编号是 0∼n−1。● 环形动态规划(1)状态 f[i][j]:表示球传了 i 次后,在小朋友 j 手中的方案数。(2)利用最后一步法确立状态转移方程:f[i][j]=f[i-1][j-1]+f[i-1][j+1](3)显然,所求为 f[m][0]。其中,设 f[0][0]=1。
2024-07-17 22:01:22 413
原创 全局变量 y1 会和 cmath 标准库中的变量产生冲突
全局变量 y1 会和 cmath 标准库中的变量产生冲突。解决方法为“将 y1 设为局部变量”。
2024-07-16 14:05:07 269
原创 洛谷 P1056 [NOIP2008 普及组 T2]:排座椅 ← 贪心算法
全局变量 y1 会和 cmath 标准库中的变量产生冲突。解决方法为“将 y1 设为局部变量”。
2024-07-16 13:55:59 984
原创 数字 0~9 与 字符 ‘0‘~‘9‘ 之间的相互转换
若 x 为数字 0~9 中的一个,'x' 为字符 '0'~'9' 中的一个,则 x 与 'x' 之间具有相互转换的关系。即,x+'0' 得到字符 '0'~'9' 中的一个,'x'-'0' 得到数字0~9 中的一个。
2024-07-16 00:43:10 151
原创 洛谷 P1055 [NOIP2008 普及组 T1]:ISBN 号码
● 若 x 为数字 0~9 中的一个,'x' 为字符 '0'~'9' 中的一个,则 x 与 'x' 之间具有相互转换的关系。即,x+'0' 得到字符 '0'~'9' 中的一个,'x'-'0' 得到数字0~9 中的一个。● 若给定字符串 str,则在下面代码中,for 循环的循序变量 i 的上界为 str.size()-1。这是因为字符串 str 的第 str.size()-1 位的值需要进行计算求得。
2024-07-16 00:11:00 568
原创 洛谷 P1095 [NOIP2007 普及组 T4]:Hanoi 双塔问题 ← 递归+高精度算法
● 设 f[i] 为将 2*i 个圆盘从 A 柱移动到 C 柱的移动次数。则将 2*i 个圆盘从 A 柱移动到 C 柱,需要如下 3 步:(1)将 2*(i-1) 个圆盘从 A 柱移动到 B 柱,需要移动 f[i-1] 次。(2)将 2 个圆盘从 A 柱移动到 C 柱,需要移动 2 次。(3)将 2*(i-1) 个圆盘从 B 柱移动到 C 柱,需要移动 f[i-1] 次。综上,f[i]=2*f[i-1]+2。初始状态为 f[1]=2。
2024-07-14 19:12:12 922
原创 洛谷 P1095 [NOIP2007 普及组 T3]:守望者的逃离 ← 动态规划
● “跑步”时,每秒移动 17 米;“闪烁法术”时,3.5 秒(施法 1 秒+恢复 10/4 秒 = 3.5 秒)移动 60 米,等价于每秒移动 17+1/7 米。可见,“闪烁法术”稍快一些。因此,当时间允许时,一定要优先使用“闪烁法术”。故只在最后一小段没时间“闪烁法术”的时候,才使用“跑步”的方式。
2024-07-14 17:22:09 316
原创 洛谷 P1094 [NOIP2007 普及组 T2]:纪念品分组 ← 贪心+排序
双指针算法,顾名思义就是使用两个指针(实践中常用两个变量来模拟双指针)来解决问题。这两个指针通常从数组/链表的两端或者一端开始移动,逐步缩小搜索范围,直到找到满足条件的解。
2024-07-14 11:34:20 552
原创 洛谷 P1093 [NOIP2007 普及组 T1]:奖学金 ← 结构体排序
● 按结构体某一字段对结构体数组进行排序:https://blog.csdn.net/hnjzsyjyj/article/details/120184972
2024-07-14 10:26:19 433
原创 AcWing 1542:老鼠和大米 ← bfs+队列
● BFS算法助记:建-入-量:头-出:https://blog.csdn.net/hnjzsyjyj/article/details/125801217● DFS算法模板:https://blog.csdn.net/hnjzsyjyj/article/details/118736059
2024-07-13 23:12:48 415
原创 AcWing 1480:电梯
● 设用数组 q[] 表示楼层,由于电梯开始时位于第 0 层,故可将数组 q[] 下标从 1 开始。则计算时只需比较 q[i] 与 q[i - 1] 的关系即可。
2024-07-13 19:51:51 272
原创 AcWing 1515:U 形 Hello World
● 由已知 n1+n2+n3−2=n,n1=n3,可得 n+2=2∗n1+n2,其中n2>=n1● 由3≤n2≤n,故可对 n+2 进行模 3 操作,则有:(1)若 (n+2)%3=0,则 n2=n1,故此条件下可得 n+2=3*n1。(2)若 (n+2)%3=1,则 n2=n1+1,故此条件下可得 n+2=3*n1+1。(3)若 (n+2)%3=2,则 n2=n1+2,故此条件下可得 n+2=3*n1+2。● 综上,可得:(1)n1=(n+2)/3(2)n2=n1+(n+2)%3
2024-07-13 18:14:54 349
原创 AcWing 96:奇怪的汉诺塔 ← 动态规划
● 情况讨论(1)二塔:圆盘个数为1时,最小移动次数为1。其他情况下为0。(2)三塔:将n-1个圆盘移到B,将最大圆盘移到C,将n-1个圆盘移到C。故有:d[n]=d[n-1]+1+d[n-1](3)四塔:将 i 个圆盘移到B(1≤i≤n)。剩余 n-i 个盘为三塔问题,故最小移动次数为 d[n-i]。最后,将 B 塔上的 i 个圆盘移到到 D 塔。故总的最小移动次数为:f[n]=min(f[n], f[i]+d[n - i]+f[i]),其中 0
2024-07-12 12:49:44 346
原创 AcWing 3587:连通图 ← dfs(邻接矩阵 or 链式前向星)
● 本题利用 dfs 判断连通图的原理在于“dfs必然能够遍历到连通图的所有点”。如果有点没有被遍历到,说明不连通。
2024-07-11 23:02:21 352
原创 AcWing 1633:外观数列
● 整数 d → 字符 ‘d‘ 的转换代码为:d+‘0‘。● 语句 string s="", s+=d+'0'; 不能写成 string s+=d+'0'; 语句,否则系统会提示 s 没有初始化。当然,语句 string s="", s+=d+'0';等价于string s=to_string(d);
2024-07-11 12:41:04 392
原创 AcWing 3381:手机键盘
●注意循环条件写为 while(cin>>str),不要写为 while(1) 之后且在其循环体中写 cin>>str,因为实践证明会 TLE。
2024-07-11 06:21:37 441
原创 AcWing 1075:数字转换 ← 树形DP
d1[u]:从当前结点 u 向下走的最长路径长度d2[u]:从当前结点 u 向下走的次长路径长度up[u]:从当前结点 u 向上走的最长路径长度p1[u]:从当前结点 u 向下走的最长路径是从哪个结点开始的p2[u]:从当前结点 u 向下走的次长路径是从哪个结点开始的
2024-07-10 00:31:34 593
原创 AcWing 1073:树的中心 ← 树形DP
树形 DP 常用的数组:d1[u]:从当前结点 u 向下走的最长路径长度d2[u]:从当前结点 u 向下走的次长路径长度up[u]:从当前结点 u 向上走的最长路径长度p1[u]:从当前结点 u 向下走的最长路径是从哪个结点开始的p2[u]:从当前结点 u 向下走的次长路径是从哪个结点开始的
2024-07-09 16:17:17 2045
原创 树的直径 ← 树形 DP 法(有负权边)
● 什么是树的直径?树上任意两结点之间最长的简单路径即为树的直径。若无负权边,可以采用两次 DFS 或者树形 DP 的方法在 O(n) 时间求出树的直径;若有负权边,则只能采用树形 DP 求解树的直径。显然,一棵树可以有多条直径,因为树中可能存在最长长度相等的多条简单路径。
2024-07-08 00:36:59 362
原创 树的直径 ← 两次 DFS 法(无负权边)
● 什么是树的直径?树上任意两结点之间最长的简单路径即为树的直径。若无负权边,可以采用两次 DFS 或者树形 DP 的方法在 O(n) 时间求出树的直径;若有负权边,则只能采用树形 DP 求解树的直径。显然,一棵树可以有多条直径,因为树中可能存在最长长度相等的多条简单路径。
2024-07-08 00:03:04 220
原创 AcWing 1138:城市公交网建设问题 ← Kruskal算法模板题
● 最小生成树问题,在结点数量较多时,适合采用 Kruskal 算法求解。
2024-07-07 21:05:59 351
原创 AcWing 1550:完全二叉搜索树
●二叉搜索树具有一个重要的性质,即它的中序遍历序列是递增的。那又如何据此性质,输出二叉搜索树的层序遍历序列呢?对二叉搜索树的结点值进行递增排序,然后执行类似于中序遍历的 dfs 操作,并在 dfs 过程中将对应的二叉搜索树结点值存入一个中序数组中,之后输出中序数组便可得到所求的二叉搜索树的层序遍历序列。
2024-07-06 19:24:08 545 3
原创 AcWing 1511:笨鸟
● 不管障碍物距 0 点的距离 x 是偶数还是奇数,能够到达的 y 值均是离散的且相差 2。之所以离散,是因为小鸟的坐标是按秒更新的。且,若障碍物距 0 点的距离 x 值是偶数/奇数,则能够到达的离散 y 值也是偶数/奇数。
2024-07-05 07:17:58 994
QGIS二次开发 の PyCharm开发环境配置.pdf
2021-04-03
数据结构(C_语言描述)(第2版)_陈广_9787301247761_课后习题参考答案.doc
2019-05-14
OpenCV.2.Computer.Vision.Application.Programming.Cookbook
2012-09-01
Data Structures and Problems Solving Using JAVA (Fourth Edition)
2011-12-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人