信息竞赛中的一些算法:并查集、最...

物理
信息竞赛中的一些算法:并查集、最小生成树和打表

用户头像
IOIAKME 更新于2025-7-4 11:36:09

这是一个关于信息竞赛的帖子。

$A\to B$ 表示把 $A$ 的值设为 $B$。

$a[i]$ 表示数组 $a$ 的第 $i$ 项。

$i$ 除非特殊说明,不指虚数单位。

某些词语可能使用不规范,请大家指出。

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

王大爷说:我的孙子学了什么信息竞赛的什么树之后就说什么要删去祖先,要是他真的把我“删了”怎么办!

从事剪枝工作的李师傅说:我儿子经常说要“剪枝”,随便破坏树木不好啊!他也不知道这项工作有多难,收入也低!

--------------------------------------------------------

先来理解什么是“树”。

一个节点是树,称这个节点是树的根节点。

一个节点①与几个树的根节点②连接的东西也是树,其中①是这整个树的根节点,①也是②的父端点。

像下面的图片就是一棵树。

[图一]

$\Huge{\text{一:并查集}}$

如果我们有一些元素:$a_1,a_2,\dots,a_n$,它们属于不同的集合。

我们可以进行一些操作,如下:

并 x y:把 $x$ 所在的集合与 $y$ 所在的集合合并。

查 x y:如果 $x$ 和 $y$ 在同一个集合里,输出 $1$,否则输出 $0$。

让我们先创建数组 $p_1=1,p_2=2,\dots,p_n=n$

$p_n$ 表示第 $n$ 个节点的父节点(一个节点可能有多个子节点,但只能有一个父节点)。

我们需要让相同的集合在同一棵树上。

如果“查”,就判断两个集合所在树的根节点是否相同。

如果“并”,就把一个集合所在树的根节点的父节点设为另一个集合所在树的根节点。

$\Huge{\text{二:最小生成树}}$

这是一个图:

[图二]

我们要画一棵树,连接它的所有端点。

要求树每一边的数之和最小。

于是根据贪心算法,我们找到最小的边:(1)

[图三]

找剩下的边中最小的边:(2)

[图四]

找到剩下边中最小的边:(3)

等等!你可能发现了,选这条边后,组成的图形就不是一个树了,于是找到次小边。(4)

[图五]

重复过程,直到连接所有端点。

[图六]

像这样就可以了。

那么,如何判断连接某一条边后,组成的图形是不是树呢?

只需要判断这条边的两个端点是否在同一棵树上就可以了。

$\Huge{\text{三:打表}}$

题目:输入 $n$,计算 $1!+2!+\dots+n!$,$1\lt n\le50$。

注意只有 $50$ 种输入,手动计算出对应输出就可以了。

收起
6
2
共6条回复
时间正序
用户头像
风力舞的煎饼果
9天前
LOL 沙发
用户头像
IOIAKME
9天前

图一:


Screenshot_2025-07-04-15-28-56-160.jpg

图二至图六:


Screenshot_2025-07-04-14-29-48-456.jpg

Screenshot_2025-07-04-14-30-34-117.jpg

Screenshot_2025-07-04-14-30-58-539.jpg

Screenshot_2025-07-04-14-31-17-021.jpg

Screenshot_2025-07-04-14-31-40-434.jpg

用户头像
Silicon(硅)『对酒当歌』
9天前
做一个矩阵的呗
3条评论
用户头像
Silicon(硅)『对酒当歌』
9天前

我提供矩阵幂求和公式

用户头像
Silicon(硅)『对酒当歌』
9天前

还要做最小生成树prim算法,你那个是krushal(还是啥的,英文名记不清)

当然想了解prim算法还得先了解最短路的诸多算法中的dijskra(还是,名字记不清了)

用户头像
IOIAKME 回复 Silicon(硅)『对酒当歌』
9天前

太好了,这些我都不会

下次我准备做 dp 和 DFS

用户头像
Silicon(硅)『对酒当歌』
9天前

阶乘求和,正解:

注意到n只有50,所以暴力求解就行了

时间复杂度:O(n²)

打表:

只要n≤10^7就可以用

3条评论
用户头像
Silicon(硅)『对酒当歌』
9天前

有人可能会疑惑了,n≤10^7手算不会累亖吗

我告诉你,用暴力的代码跑一遍,并且按照数组初始化的格式输出

用户头像
IOIAKME
9天前

$50!\gg2^{64}$

要用高精度

用户头像
Silicon(硅)『对酒当歌』 回复 IOIAKME
9天前

没有模数吗?

顺便说一下,你做一个高精度的介绍吧!

用户头像
深湛之思
9天前

当我刚看到时:一维数组(我一开始学居然看成了一堆数组)??终于有我能看懂的学术贴了

继续看时:(当场裂开)啊我%

(你上洛谷吗)

4条评论
用户头像
IOIAKME
9天前

是的。

用户头像
Silicon(硅)『对酒当歌』 回复 IOIAKME
9天前

我也上

用户头像
Silicon(硅)『对酒当歌』 回复 IOIAKME
7天前

提示:电脑上登录质心也可以发论坛

我打算替你做几篇带代码的算法介绍(讲解)

终于能发正宗的O-Box了!

用户头像
Silicon(硅)『对酒当歌』 回复 Silicon(硅)『对酒当歌』
7天前

佬记得看看,顺便纠正一下错误呗

用户头像
potential
8天前
信息竞赛难吗
1条评论
用户头像
sigma让每个孩子都飞起来
7天前

在这发不了图片我上自己的贴给你看看