摘要:
学习笔记 我认为我这个算法可能无法讲明白,而且工作量巨大,所以为了让你快速学会我推荐学习下列笔记。 学习笔记1 学习笔记2 学习笔记3 放个模板 #include <bits/stdc++.h> using namespace std; const int N=1e6+10; char a[N],b 阅读全文
摘要:
闲话 虽然这题好像找不到原题了,但毋庸置疑地说这的确是并查集的好题。 找到了 acwing 洛谷 分析 可以先对奇偶区间进行分析,当这个有偶数个 1 时,区间 \(1-(left-1)\) 一定与 区间 \(1-right\) 的奇偶性相同。 上面的图 \(3-4\) 为偶区间,根据分析,\(1-2 阅读全文
摘要:
概念 最近公共祖先简称 LCA(Lowest Common Ancestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 感觉其实看个图就懂了吧 图中例子 \(lca(u,v)=x;\) 这个问题理解概念不难,主要是学会如何计算,下面介绍三种方法。 方法 1.暴力法 朴素 阅读全文
摘要:
1.线段不覆盖问题 给出 \(n\) 个线段,选择尽量多的线段使得选择的线段相互之间无重叠,问最多可以选多少条线段。 解析 考虑贪心,将线段按右端点从小到大排序,如果这条线段的左端点大于上一条线段的右端点那就选择这条线段。 为什么这么贪是对的呢,因为将右端点排序可以使右边剩余的空间尽量大,那么剩余的 阅读全文
摘要:
定义 Manacher 马拉车,一种为了求字符串中最长的回文字串的算法。 暴力 这个算法是从暴力的方法转化过来的,暴力肯定是枚举字符串每个字符作为中心,然后向外扩展,这样的复杂度为 \(O(n^2)\)。 特殊处理 而 Manacher 则是按照回文对称的性质的进行优化的,首先回文串有奇数串 \(a 阅读全文
摘要:
P8686 原题链接 做完这题感觉可以很好地理解并查集。 一眼看过去是不是只看出了暴力(不会只有我这样吧),我们先从暴力的方法再推到并查集方法,首先暴力的做法肯定是:如果一个数有重复的数那就一直加直到没有重复的数。 那这个过程能不能 \(O(1)\) 地求呢,当然可以,对于每个数 \(x\) 将他们 阅读全文
摘要:
排序这个东西真的挺卷的,有些就追求极致的速度,有些追求极致的简洁,有必要学一学提一提,尽管 \(sort\) 能解决绝大部分问题。 学习笔记 冒泡排序 mpft 第一个学的排序也是最简单的排序,也就是一个一个比较,如果右边的数大于左边的数就交换,我当初老师说这一个一个交换是不是就像冒泡一样,那确实哈 阅读全文
摘要:
提交题目链接 题意: 有 \(n\) 个点,每个点有相应的权值,用 \(m\) 条边将点连接形成多个联通块,按某种顺序依次删除这 \(n\) 个点,求每次操作后,全部的连通块中总权值的最大值。 解析: 将依次删点变为依次加点,并在加点时用并查集维护权值,然后更新最大权值。 插嘴: 看似简单的题其实有 阅读全文