摘要: Dijkstra(迪杰斯特拉)算法 简单版 须知 首先用几个数组表示需要的状态: dis[] 表示距离从初始点到对应点的距离,初始点置为0,其他置为无穷 graph[][] 邻接矩阵,记录两点间连线的权重,可以记录无向图和有向图 check[] 判断当前点是否被记录 算法思路: 假定a为起点,每次选 阅读全文
posted @ 2024-05-14 13:42 lulaalu 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 线段树 1、了解存储结构 存放左右范围,和左右子节点的预定义 #define lc p<<1 #define rc p<<1|1 struct node { int l, r, sum; }tr[4 * N];//注意要开4倍,感兴趣自己搜 2、递归建树 思路 对结点的左右范围赋值 判断是不是叶子结 阅读全文
posted @ 2024-05-09 16:51 lulaalu 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 使用random库的函数前,必须调用seed()函数设置随机数种子。 判断'ab'是否为'acbed' 的子串的表达式是'ab'in'acbed' 有变量a=1,b=9,那么eval('a*b'+'/'+'(a+b)')的值是0.9 表达式'abcdefg'[:2:-2]<='gfe'的值为 Tru 阅读全文
posted @ 2024-04-29 20:12 lulaalu 阅读(6) 评论(0) 推荐(0) 编辑
摘要: Floyd 首先,对该算法有一个大致的了解: 通过动态规划的方式,按顺序对每两个点之间的最短距离进行处理 而这个顺序用一句话总结就是 :依次将每个点作为"中间点"做更新 1、存储 邻接矩阵存储 用两个数组存储信息 一个存储两点长度 一个存储路径Path 其中,D(-1)表示初始状态,相当于邻接矩阵, 阅读全文
posted @ 2024-04-27 22:16 lulaalu 阅读(7) 评论(0) 推荐(0) 编辑
摘要: Kruskal 算法 edge存储边起点、终点、边权 fa[x]存储x的父节点 1、先初始化父节点 2、按边的权排序(贪心思想) 3、如果不在同一集合内,把这条边加入最小生成树,并且合并两个集合,反之就跳过 4、最后根据连接的点是否是顶点的个数减一确定能否生成最小生成树 如下图,红色表示取的边和次序 阅读全文
posted @ 2024-04-13 10:32 lulaalu 阅读(19) 评论(0) 推荐(0) 编辑
摘要: 合并石子问题 https://www.luogu.com.cn/problem/P1880 [NOI1995] 石子合并 题目大致描述 $N$堆石子摆成了一个圆,每相邻的两堆合成一堆,新的一堆的石子数为得分,求得分最小和最多 $1\leq N\leq 100$,$0\leq a_i\leq 20$。 阅读全文
posted @ 2024-04-12 20:35 lulaalu 阅读(21) 评论(0) 推荐(0) 编辑
摘要: Manacher(马拉车算法) P3805 模板manacher 算法 1、写出暴力方法 先处理字符串,用#分隔,头为都要有 用一个r数组存储每个点的最长子串的半径 枚举每个点然后向外扩张 扩张完毕后自减 表示半径 获取最大值 暴力法如下 string deal(string& str) { str 阅读全文
posted @ 2024-04-10 18:31 lulaalu 阅读(8) 评论(0) 推荐(0) 编辑