![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法提高
文章平均质量分 88
以竞赛题目为例,记录常用经典算法与高级数据结构。
老帅比阿
这个作者很懒,什么都没留下…
展开
-
【蓝桥杯】版本分支 (图论——Tarjan求LCA)
首先是最近公共祖先的概念(什么是最近公共祖先?):在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。换句话说,就是两个点在这棵树上距离最近的公共祖先节点。所以LCA主要是用来处理当两个点仅有唯一一条确定的最短路径时的路径。有人可能会问:那他本身或者其父亲节点是否可以作为祖先节点呢?答案是肯定的,很简单,按照人的亲戚观念来说,你的父亲也是你的祖先,而LCA还可以将自己视为祖先节点。 举个例子吧,如下图所示4和5的最近公共祖先是2,原创 2022-06-05 18:34:16 · 405 阅读 · 0 评论 -
算法提高——高级数据结构 (带权并查集)
食物链动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C 吃 A。现有 N 个动物,以 1∼N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这 N 个动物所构成的食物链关系进行描述:第一种说法是 1 X Y,表示 X 和 Y 是同类。第二种说法是 2 X Y,表示 X 吃 Y。此人对 N 个动物,用上述两种说法,一句接一句地说出 K 句话,这 K 句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假原创 2022-06-02 17:08:57 · 156 阅读 · 0 评论 -
算法提高——树上DP(树的直径)
树的直径是图论里边非常高的考察点并且是入门树形dp的基础,竞赛的同学务必重视。树上最远两点(叶子结点)的距离。大臣的旅费很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。J是T国重要大臣,他巡查于各大城市之间,体察民情。所以,从一个城市马不停蹄地到另一个城市成了J最常做的原创 2022-05-31 23:33:59 · 1853 阅读 · 1 评论 -
算法提高——数据结构(多路归并+二叉堆)
文章目录一、例题二、思路分析三、代码一、例题序列给定 m 个序列,每个包含 n 个非负整数。现在我们可以从每个序列中选择一个数字以形成具有 m 个整数的序列。很明显,我们一共可以得到 nm 个这种序列,然后我们可以计算每个序列中的数字之和,并得到 nm 个值。现在请你求出这些序列和之中最小的 n 个值。输入格式第一行输入一个整数 T,代表输入中包含测试用例的数量。接下来输入 T 组测试用例。对于每组测试用例,第一行输入两个整数 m 和 n。接下在 m 行输入 m 个整数序列,数列中的原创 2022-05-20 00:04:40 · 157 阅读 · 0 评论 -
算法提高——基础算法(常见贪心策略)
文章目录一、例题士兵二、解题思路:三、贪心证明:总结一、例题士兵格格兰郡的 N 名士兵随机散落在全郡各地。格格兰郡中的位置由一对 (x,y) 整数坐标表示。士兵可以进行移动,每次移动,一名士兵可以向上,向下,向左或向右移动一个单位(因此,他的 x 或 y 坐标也将加 1 或减 1)。现在希望通过移动士兵,使得所有士兵彼此相邻的处于同一条水平线内,即所有士兵的 y 坐标相同并且 x 坐标相邻。请你计算满足要求的情况下,所有士兵的总移动次数最少是多少。需注意,两个或多个士兵不能占据同一个位置。原创 2022-05-16 23:06:02 · 373 阅读 · 0 评论 -
算法提高——数据结构(对顶堆)
文章目录前言一、例题动态中位数二、算法介绍1.对顶堆代码前言对顶堆是数据结构堆的一种应用,属于面试必考题之一,对顶堆可以用来动态维护第k大的值,比如中位数等等。一、例题动态中位数依次读入一个整数序列,每当已经读入的整数个数为奇数时,输出已读入的整数构成的序列的中位数。输入格式第一行输入一个整数 P,代表后面数据集的个数,接下来若干行输入各个数据集。每个数据集的第一行首先输入一个代表数据集的编号的整数。然后输入一个整数 M,代表数据集中包含数据的个数,M 一定为奇数,数据之间用空格隔开。原创 2022-05-15 13:25:46 · 955 阅读 · 0 评论 -
【蓝桥杯】地宫取宝 (究极缝合怪,01背包+数塔模型+最大上升子序列)
X 国王有一个地宫宝库,是 n×m 个格子的矩阵,每个格子放一件宝贝,每个宝贝贴着价值标签。地宫的入口在左上角,出口在右下角。小明被带到地宫的入口,国王要求他只能向右或向下行走。走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。当小明走到出口时,如果他手中的宝贝恰好是 k 件,则这些宝贝就可以送给小明。请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这 k 件宝贝。输入格式第一行 3 个整数,n,m,k,含义见题目描述。原创 2022-03-21 21:36:44 · 126 阅读 · 0 评论 -
算法提高——基础算法(龟速乘)
文章目录一、例题二、思路分析三、算法介绍四、完整代码总结一、例题求 a 乘 b 对 p 取模的值。输入格式第一行输入整数a,第二行输入整数b,第三行输入整数p。输出格式输出一个整数,表示a*b mod p的值。数据范围1≤a,b,p≤1018输入样例:345输出样例:2题目来源Acwing二、思路分析题目要让我们两个10e18的数相乘,必然会爆longlong,对于这种问题,我们的解法有两个,一个是高精度,另一个就是龟速乘。三、算法介绍先说一个很简单的思路,我们让结果原创 2022-05-12 12:20:37 · 1238 阅读 · 0 评论 -
[蓝桥杯][2019年第十届省赛真题] 糖果 (IDA*解决重复覆盖问题)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录题目链接:糖果一、题目描述前言解题思路算法介绍代码总结题目链接:糖果一、题目描述糖果店的老板一共有M 种口味的糖果出售。为了方便描述,我们将M种口味编号1~M。小明希望能品尝到所有口味的糖果。遗憾的是老板并不单独出售糖果,而是K颗一包整包出售。幸好糖果包装上注明了其中K 颗糖果的口味,所以小明可以在买之前就知道每包内的糖果口味。给定N 包糖果,请你计算小明最少买几包,就可以品尝到所有口味的糖果。输入第一行包含三个整数N、M原创 2021-12-20 16:58:25 · 1163 阅读 · 13 评论 -
算法提高——基础算法(二分答案)
文章目录前言一、什么是二分答案二、算法介绍1.使用条件和适用情况2.代码模板3.例题解析总结前言博主在这几天刷算法的时候,被一些二分答案的题目几尽折磨,在苦苦刷题的时候从yxc大佬那里学到了新的二分模板,在对这个模板深入实践后,愈发感觉这个模板运用好几乎万能,所以在此时记录下我的一些新的理解,并对之前的博客相互印证。(二分查找细节讲解~~~~阅读量好少支持一下吧 没看过的可以看下,相信对你有帮助)一、什么是二分答案比如说你要从一本英汉词典上查一个单词,你从头到尾一页一页的翻着找,这样找可以保证一定原创 2022-01-13 11:59:03 · 2371 阅读 · 18 评论 -
【蓝桥杯】网络分析(带权并查集)
小明正在做一个网络实验。他设置了 n 台电脑,称为节点,用于收发和存储数据。初始时,所有节点都是独立的,不存在任何连接。小明可以通过网线将两个节点连接起来,连接后两个节点就可以互相通信了。两个节点如果存在网线连接,称为相邻。小明有时会测试当时的网络,他会在某个节点发送一条信息,信息会发送到每个相邻的节点,之后这些节点又会转发到自己相邻的节点,直到所有直接或间接相邻的节点都收到了信息。所有发送和接收的节点都会将信息存储下来。一条信息只存储一次。给出小明连接和测试的过程,请计算出每个节点存储信息原创 2022-03-17 22:55:52 · 1225 阅读 · 2 评论