随笔分类 -  OI

摘要:T1: 每次找到最小的堆,与次小的合并即可 T2: 简单题,直接口胡了 考虑转化成几个大小关系 然后只要每次将队列首插入堆中即可 T3: 显然字典序满足贪心性质 每次用堆来维护没被取的最大值,然后取出它再在后面的元素上打一个懒标记视为已去过,用链表来维护该元素后面一个元素即可 T4: 呃呃呃,这题第 阅读全文
posted @ 2024-11-05 20:02 daydreamer_zcxnb 阅读(18) 评论(0) 推荐(0)
摘要:前言 本蒟蒻学习了7,8遍树状数组才学会,原因不是因为我笨,而是没有把根本的理念先搞懂,so,我打算写这篇博客,把树状数组根本剖析一下 用途 用于快速单点修改,快速查询前缀和,从而快速查询区间和 工作原理 其中有数字的点存储的是树状数组的 \(tr[]\) ,灰色节点则是为了方便理解而画出的子虚乌有 阅读全文
posted @ 2024-11-04 11:37 daydreamer_zcxnb 阅读(60) 评论(0) 推荐(1)
摘要:前言 连通性问题确实时一大比较难啃得蛋糕,每次都要先学习一遍,还不如一次学到通 无向图的连通性问题 求割点 连通图:连通图内的所有点都可以互相到达 割点:将割点删掉后整张图不连通 定理1: 一个点s是割点,当且仅当s作为该连通图的根时,会把连通图分为不相连的几部分 定理2: 一个非根节点u是割点,当 阅读全文
posted @ 2024-11-02 16:30 daydreamer_zcxnb 阅读(84) 评论(1) 推荐(0)
摘要:前言 这套题相对来讲难度不算高,并且质量也很好,建议尝试 CF1187A 一眼秒,但我没有 考虑s,t只有这一种排列方式,所以取一下 \(max(n-s,n-t)\) 点击查看代码 #include<bits/stdc++.h> using namespace std; int T,n,s,t; i 阅读全文
posted @ 2024-10-30 16:51 daydreamer_zcxnb 阅读(235) 评论(3) 推荐(2)
摘要:Floyd算法 求图上i,j任意两点的最短路,按小图到全图的思想 想想一个图中所有灯都是灭的,逐个点亮灯,点亮第k盏灯时,用k重新更新i,j的最短路 \(dp[k][i][j]\) 代表已经用编号1~k的点来更新i,j的最短路径了 转移方程 $dp[k][i][j]=min(dp[k-1][i][k 阅读全文
posted @ 2024-10-29 19:43 daydreamer_zcxnb 阅读(31) 评论(0) 推荐(0)
摘要:算法理解 最小生成树用到了一个贪心策略:图上最小的边一定在最小生成树上(MST),证法选取三个点,手模一下,很显然 Kruskal算法 最小的边一定在MST上,每次选取最小的边,添加到MST中,再判圈,若加入这条边形成圈,则不合法,可以用并查集实现,复杂度瓶颈为排序 \(O(mlogm)\) 代码 阅读全文
posted @ 2024-10-27 21:01 daydreamer_zcxnb 阅读(83) 评论(0) 推荐(0)
摘要:算法理解 首先我们要了解一种很典型的图论建图思想,如果a一定b,那么就将a->b建一条边,然后如果在一个强连通分量中逻辑关系冲突了,则不满足,反之则满足 2-sat与扩展域并查集的区别 2-sat有向图,扩展域并查集无向图 2-sat若a则b,扩展域并查集若a则b若b则a 2-sat的具体实现 我们 阅读全文
posted @ 2024-10-15 11:44 daydreamer_zcxnb 阅读(49) 评论(0) 推荐(0)
摘要:前言 开坑,因为上课接受了太多的题目然后又没有时间去补,只好先把思路放在这里,有空在补,看到这条的记得催我去补题T_T 2024.10.4 洛谷P2296寻找道路(已完成) 建反边,然后记录所有终点能到达的点,然后因为每条边的长度均为一,因为边权为1,所以bfs然后判断这个点是否合法 洛谷P1967 阅读全文
posted @ 2024-10-04 19:24 daydreamer_zcxnb 阅读(47) 评论(1) 推荐(2)
摘要:算法理解 维护两个点是否能到达,于是将互相能到达的点用其中一个点来代表4 T1: 板子 T2: 带权并查集简化,用dis来代表一个点到其中并查集中的头的距离,注意dis最开始应赋值为0,因为考虑当这个点直接与代表元素相连时,如果重复find该元素,dis[fa]会被加很多次,只有当其为0时才能解决问 阅读全文
posted @ 2024-10-02 15:34 daydreamer_zcxnb 阅读(18) 评论(0) 推荐(0)
摘要:算法理解 将一个字符串的每一位对应一个深度,每个字符对应一个节点,有一堆这样的字符串于是就构成了一棵树 如何存储树呢? 如果按照树的大小开点,有n层,一共要开 \(26^n\) 个点,一定是不行的,考虑一种类似于链表的思想,如果要开一个点,就进行编号,然后对应26条边分别存下一位的标号,注意要开 \ 阅读全文
posted @ 2024-09-29 11:43 daydreamer_zcxnb 阅读(33) 评论(0) 推荐(1)
摘要:写在前面 喜报:听了四遍都没学懂的KMP算法,终于在 gyy 大佬的耐心讲解下搞懂了,大佬orz!!! 因为有ybt,所以直接在上面写吧 正文 kmp算法本质上就是对模式串(要匹配的子串 两个串中短的那个 )中很多重复的前缀和后缀索引起来,使得在一个地方失配了也不要紧,不用重新来的算法(看不懂不要紧 阅读全文
posted @ 2024-09-27 09:35 daydreamer_zcxnb 阅读(51) 评论(0) 推荐(1)
摘要:算法理解 将一个字符串,转化成数字,这样可以省去一个一个字母比较的复杂度。 数位哈希 将一个字符串中的一个元素看成一位数,把整个字符串,看成是一个p进制数,由于可能这个字符串对应的数太大了,所以我们需要取模运算,但是有可能就会有两个不一样的字符串数值相等,就是哈希冲突 取模有两种方式,自然溢出,手输 阅读全文
posted @ 2024-09-18 17:01 daydreamer_zcxnb 阅读(34) 评论(0) 推荐(0)
摘要:概念理解 c风格字符串 字符数组大小比字符串多一个 char s[6]={'H','e','l','l','o','\0'}; char s[]="Hello"; 用法 1.存储方式及赋值 '\0' 占用存储空间,不计入长度 作为变量使用时,不可 s="hellow" s1=s2 只可以逐个字符赋值 阅读全文
posted @ 2024-09-15 08:35 daydreamer_zcxnb 阅读(31) 评论(0) 推荐(0)
摘要:算法理解 从一个点出发,遍历它的所有相邻点,一层一层往下遍历 T1:(30min) bfs注意起点不一定在左上角,四个方向都要走 T2:(40min) bfs注意山峰山谷有一个很重要的条件,周围的所有点高度必须大于或小于山峰山谷的高度 T3:(3h+) 比对与每一种情况(x,y,c1,c2任意一位不 阅读全文
posted @ 2024-09-11 14:53 daydreamer_zcxnb 阅读(23) 评论(0) 推荐(0)
摘要:算法理解 将每种状态看成一个节点,基于树上的搜索 剪枝技巧 正确,准确,高效 1.优化搜索顺序 2.排除等效冗杂 3.可行性剪枝 如果前面是死胡同,就不要再走了 4.最优性剪枝 当前代价超过搜到过最优的答案 5.记忆化 T1: 暴力搜索,一半的拔河人数分配情况 T2: 暴力搜索,没有剪枝 T3: 卡 阅读全文
posted @ 2024-09-09 21:28 daydreamer_zcxnb 阅读(38) 评论(0) 推荐(0)