加载中…

返回上一页
摘要: 字符串哈希(hash) 字符串哈希,其实就是类似于一个数组前缀和的一个东西,能够快速判断字符串的相等情况. 首先是用一个 unsigned 的自然溢出,因为模运算是非常慢的,所以要用到这么个自然溢出. 由于字符串是有序的,在判等的时候不能直接加数,否则是会被误认为相等的. 这时需要引入一个 base 阅读全文
posted @ 2022-10-05 16:23 1Liu 阅读(7) 评论(0) 推荐(0)
摘要: 强连通分量 啥叫强连通分量? 一般来讲,一张有向图的子图是强连通分量,当且仅当其内部任意一个点可以到达另外任意一个点. 如何求? dfn[x]:点x的访问时间,也是反拓扑序; low[x]:点x的后面遍历到的点里在栈中最早节点的时间戳 模板: inline void tarjan(rll x) { 阅读全文
posted @ 2022-10-05 16:15 1Liu 阅读(24) 评论(1) 推荐(0)
摘要: ~~咕了好久没有公开,今天终于公开了……~~ 矩阵 什么是矩阵? 其实就是一个二维数组.~~用你说~~ 矩阵乘法 就是把两个矩阵乘起来,获得一个新的矩阵. 需要注意它只满足结合律,不满足交换律. 设 A 矩阵为 n 行 m 列的矩阵,且 B 矩阵为 m 行 p 列的矩阵(因为行数列数不相同是没有乘法 阅读全文
posted @ 2022-10-05 16:15 1Liu 阅读(10) 评论(0) 推荐(0)
摘要: 栈 什么是栈? ~~这还用废话,~~当然是一头的,往里塞往外拿的容器了呗! 它能用来干嘛? 在递归某个数群时会用到. 队列 那就是一头进另一头出了呗. ​​bfs 和最短路一般使用队列. 单调栈、单调队列 单调栈: 主要用于寻找最值的连续段,也就是这个数最长在哪个区间里是最大/小值. 例题:Look 阅读全文
posted @ 2022-10-05 16:14 1Liu 阅读(5) 评论(0) 推荐(0)
摘要: 贪心算法 贪心,就是只考虑当前状态,每一次选择最优的方案. 什么时候贪心是正确的? 当当前状态对后面状态无影响或者后面状态依赖于当前状态时贪心可用. 这东西还是要具体问题具体分析. 例题:合并果子 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆. 多多决定把所有的果子 阅读全文
posted @ 2022-10-05 16:14 1Liu 阅读(35) 评论(0) 推荐(0)
摘要: 分治算法 分治,顾名思义就是把一个整块的劈成两半,左右分别处理. 没了. 二分答案 二分在 noip 中考查得相对更多一些. 具体就是查询 mid 的值,然后缩小查询区间直至查到需要的点. rll l=1,r=n,ans; while(l<=r) { if(check(mid)) ans=mid,l 阅读全文
posted @ 2022-10-05 16:14 1Liu 阅读(13) 评论(0) 推荐(0)
摘要: 所谓并查集,就是一个用于快速查询所属集合与合并集合的东西. 初始化: ll fa[maxn]; // 开始都是独立集合 for(rll i=1;i<=n;i++) fa[i]=i; 查询: inline ll find(rll x) { if(x^fa[x]) fa[x]=find(fa[x]);/ 阅读全文
posted @ 2022-10-05 16:14 1Liu 阅读(9) 评论(0) 推荐(0)
摘要: 最小生成树 最小生成树,是用来从一个连通图中计算一个最小使所有点连通所需的权值. 因为要保证权值尽可能小,因此一定不会多连任何一条边. 所以最终选择出来的边连接起来一定是一棵树. Prim Prim算法采用与 Dijkstra、Bellman-Ford 算法一样的“蓝白点”思想:白点代表已经进入最小 阅读全文
posted @ 2022-10-05 16:14 1Liu 阅读(60) 评论(0) 推荐(0)
摘要: 树状数组,又名 ​​bit,是一类支持单点修改、查询前缀和的一类最基础的数据结构. ​​lowbit 取一个数二进制最后一位. 通常使用这个数二进制与它的相反数得到. #define lowbit(x) (x&-x) 数组 ll c[maxn]; 没了. 修改 每次加自身的 lowbit 直至加到要 阅读全文
posted @ 2022-10-05 16:14 1Liu 阅读(3) 评论(0) 推荐(0)
摘要: 线段树,是一类维护区间值的数据结构. 它能够实现单点/区间修改加上单点/区间查询,也可以查询区间和、最值等等. 线段树是一棵二叉树,树上的每一个节点表示数列的一个区间. ~~原谅我当初像素没有调好~~ 可以发现它的构成:一个区间 [l , r] 的左子树代表的区间是 [l , ],右子树代表的区间是 阅读全文
posted @ 2022-10-05 16:14 1Liu 阅读(10) 评论(0) 推荐(0)
摘要: floyed 枚举外层 k,再枚举内层 i 与 j,这样就能得到从 i 到 j 的最短路径. 它是多源最短路径算法. 时间复杂度 ​​O(n^3^). inline void floyed() { memset(dis,0x3f,sizeof(dis));for(rll i=1;i<=n;i++) 阅读全文
posted @ 2022-10-05 16:14 1Liu 阅读(12) 评论(0) 推荐(0)
摘要: 搜索分两种,一种是 dfs ~~爆搜~~,深度优先遍历;另一种是 bfs,广度优先遍历. 深度优先遍历的基本操作: 找点 递归 回溯 dfs(int x) { if(搜索到终点) { 累加答案; return; } for(遍历x后面元素i) { flag[i]=1; dfs(i); flag[i] 阅读全文
posted @ 2022-10-05 07:28 1Liu 阅读(8) 评论(0) 推荐(0)
摘要: 高精度 阅读全文
posted @ 2022-10-05 07:02 1Liu 阅读(10) 评论(0) 推荐(0)
摘要: ​ 阅读全文
posted @ 2022-10-05 06:33 1Liu 阅读(0) 评论(0) 推荐(0)
摘要: ​ 阅读全文
posted @ 2022-10-05 06:33 1Liu 阅读(0) 评论(0) 推荐(0)