- 博客(34)
- 收藏
- 关注
原创 树链剖分——从入门到入坟
在向上跳的过程中,如果当前节点在重链上,向上跳到重链顶端,如果当前节点不在重链上,向上跳一个节点。第二个 DFS 记录所在链的链顶(top,应初始化为结点本身)、重边优先遍历时的 DFS 序(id)、DFS 序对应的节点编号()。重链剖分还能保证划分出的每条链上的节点 DFS 序连续,因此可以方便地用一些维护序列的数据结构(如线段树)来维护树上路径的信息。如果有多个子树最大的子结点,取其一。条连续的链,每条链上的点深度互不相同(即是自底向上的一条链,链上所有点的 LCA 为链的一个端点)。
2024-08-26 16:50:58
1068
原创 树上启发式合并——dsu on tree
如果在顶点 v 的子树中,没有其他颜色比颜色 c 出现的次数更多,那么我们就称颜色 c 在顶点 v 的子树中占主导地位。在处理颜色布丁集合合并的问题时,我们面临的是一系列颜色布丁集合,每个集合可以看作一个队列。启发式合并的核心思想是每次将较小的集合合并到较大的集合中,这样每次合并的复杂度为。这个集合的大小可以认为是集合的高度(在正常情况下),而我们将集合高度小的并到高度大的显然有助于我们找到父亲。在这里,对于两个大小不一样的集合,我们将小的集合合并到大的集合中,而不是将大的集合合并到小的集合中。
2024-08-25 16:04:40
1030
原创 XCPC集训十题解
A - Glutton Takahashi题意:解题思路:代码:B - Grid Walk题意:解题思路:代码:C - Minimum Glutton题意:解题思路:代码:D - K-th Nearest题意:解题思路:代码:E - Maximum Glutton题意:解题思路:代码:F - Range Connect MST题意:解题思路:代码:F - Range Connect MST题意:解题思路:代码:G - Last Major City题
2024-08-03 15:06:33
279
原创 根号分治莫队
莫队算法是由莫涛提出的算法。在莫涛提出莫队算法之前,莫队算法已经Codeforces 的高手圈里小范围流传,但是莫涛是第一个对莫队算法进行详细归纳总结的人。莫涛提出莫队算法时,只分析了普通莫队算法,但是经过 OIer 和 ACMer 的集体智慧改造,莫队有了多种扩展版本。莫队算法可以解决一类离线区间询问问题,适用性极为广泛。同时将其加以扩展,便能轻松处理树上路径询问以及支持修改操作。
2024-07-31 22:38:10
1037
原创 差分约束系统
差分约束系统是一种特殊的nnn元一次不等式组,它包含nnn个变量x1x2xnx1x2xn以及mmm个约束条件,每个约束条件是由两个其中的变量做差构成的,形如xi−xj≤ckxi−xj≤ck,其中1≤ij≤ni≠j1≤k≤m1≤ij≤nij1≤k≤m并且ckc_kck是常数(可以是非负数,也可以是负数)。我们要解决的问题是:求一组解x1a1。
2024-07-29 20:23:15
920
原创 割点(Articulation Point)
在图论中,割点(Articulation Point)是指在一个无向图中,如果删除某个节点及其关联的边会导致图的连通分量数量增加,那么这个节点就被称为割点。换句话说,割点是图中的一个节点,删除它会使图变得不连通或减少连通分量的数量。
2024-07-18 21:17:48
752
原创 割边和边双联通分量
在图论中,割边(Bridge)是指在一个无向图中,如果删除某条边会导致图的连通分量数量增加,那么这条边就被称为割边。换句话说,割边是连接两个不同连通分量的边。
2024-07-18 19:26:07
360
原创 Tarjan算法缩点
在DFS的过程中,当一个节点的所有邻接节点都被访问完毕后,该节点才会被标记为一个强联通分量的结束点。这是因为Tarjan算法在DFS遍历过程中,最后一个被标记的强联通分量在缩点图中没有入边,从而在拓扑排序中应该是第一个节点。由于Tarjan算法是深度优先的,最后一个被标记的强联通分量在缩点图中没有入边,这意味着它在拓扑排序中应该是第一个节点。在有向无环图中,由于没有环的存在,我们可以利用拓扑排序来确定节点的处理顺序,然后使用动态规划来计算最短路径。你只需要求出这个权值和。共一行,最大的点权之和。
2024-07-15 21:36:37
1394
原创 强联通分量——Tarjan算法
Tarjan算法是一种用于寻找有向图中强联通分量(Strongly Connected Components, SCCs)的算法。它是由Robert Tarjan在1972年提出的,基于深度优先搜索(DFS)和栈的数据结构。
2024-07-15 16:14:17
476
原创 逆序对——树状数组
通过建立树状数组并结合离散化处理,可以高效地统计序列中每个元素与其之前的元素构成的逆序对数量。离散化确保了空间复杂度在可接受范围内,而排序时考虑元素出现顺序则避免了相等元素导致的错误。
2024-07-12 17:38:39
861
原创 树状数组(Binary Indexed Tree, BIT)
树状数组(Binary Indexed Tree, BIT),也称为 Fenwick Tree,是一种用于高效处理数组前缀和查询和单点更新的数据结构。它能够在 (O(\log n)) 时间内完成单点更新和前缀和查询操作。
2024-07-12 17:06:20
457
1
原创 凸包——G - Highest Ratio
在求凸包的循环中,如果栈顶的点不属于凸包,则弹出栈顶元素,该点的ans即为该点与弹出后的栈顶点的斜率值。,第 x 个点到第 y 个点连线的斜率即为区间。为前 i 个元素的前缀和,在平面上放N个点。求完凸包后,凸包上的相邻两点的斜率即为ans。= 斜率),在这个图上求凸包即可。项的平均值最大化,并满足。的平均值(平均值 =
2024-07-09 21:26:23
820
原创 成语字典查询系统
(2)使用SQLCommand、SqlDataAdapter与DataSet等对象完成对数据库的查询与维护操作。(1)SQL Server管理系统中创建数据库和数据表;(1)掌握小型数据库管理系统的设计开发方法;(2)灵活使用数据库控件。
2024-05-17 18:02:48
522
原创 面向对象——实验6
#pragma onceusing namespace System::IO;namespace 实验6 { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace Syste
2024-04-28 10:06:14
216
原创 Visual Studio 2010创建Windows窗体应用程序
Windows窗体应用程序指的是在Windows操作系统上运行的应用程序,它们使用了Windows窗体库来创建用户界面。Windows窗体应用程序通常具有窗体、按钮、文本框、菜单等控件,用户可以通过与这些控件交互来完成各种任务。开发Windows窗体应用程序一般使用Visual Studio等集成开发环境(IDE),通过拖拽和配置控件,开发人员可以快速地创建用户界面。在创建窗体应用程序时,开发人员可以使用C#、VB.NET等编程语言来编写逻辑代码,与控件进行交互,处理用户输入,展示数据等。
2024-04-16 00:00:32
2447
原创 Visual Studio 2010创建Windows窗体应用程序
Windows窗体应用程序指的是在Windows操作系统上运行的应用程序,它们使用了Windows窗体库来创建用户界面。Windows窗体应用程序通常具有窗体、按钮、文本框、菜单等控件,用户可以通过与这些控件交互来完成各种任务。开发Windows窗体应用程序一般使用Visual Studio等集成开发环境(IDE),通过拖拽和配置控件,开发人员可以快速地创建用户界面。在创建窗体应用程序时,开发人员可以使用C#、VB.NET等编程语言来编写逻辑代码,与控件进行交互,处理用户输入,展示数据等。
2024-04-10 22:00:22
3079
2
原创 7-13 银行排队问题之单队列多窗口加VIP服务
假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有多个窗口可选择时,假设顾客总是选择编号最小的窗口。在第一行中输出平均等待时间(输出到小数点后1位)、最长等待时间、最后完成时间,之间用1个空格分隔,行末不能有多余空格。本题要求输出前来等待服务的N位顾客的平均等待时间、最长等待时间、最后完成时间,并且统计每个窗口服务了多少名顾客。在第二行中按编号递增顺序输出每个窗口服务了多少名顾客,数字之间用1个空格分隔,行末不能有多余空格。
2024-03-21 21:42:13
809
1
原创 7-13 地下迷宫探索
地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式。地道网是房连房、街连街、村连村的地下工事,如下图所示。我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智。在现在和平发展的年代,对多数人来说,探索地下通道或许只是一种娱乐或者益智的游戏。本实验案例以探索地下通道迷宫作为内容。假设有一个地下通道迷宫,它的通道都是直的,而通道所有交叉点(包括通道的端点)上都有一盏灯和一个开关。请问你如何从某个起点开始在迷宫中点亮所有的灯并回到起点?
2024-02-29 17:03:01
429
1
原创 字符串哈希
类似于十进制和二进制,字符串哈希一般自定义为Base进制然后对Mod取模或者ull自然溢出来达到取模。但是为了防止出题人卡哈希,一般采用双Mod1e971e99;Base131或者13331。
2024-02-14 00:28:44
655
1
原创 最大连续子段和
定义一个变量maxn初始化为无穷小,更新最大子段和,同时定义一个变量res初始化为0,表示当前子段的和.我们考虑x数组的第i个元素xi,如果当前子段和加上xi是一个大于等于0的数,那么当前的子段和一定对后面的元素有贡献,所以将xi加到res里,同时更新最大子段和maxn;反之,如果当前子段和res加上xi是一个负数,那么,加上后的子段和一定对后面的元素有副作用,此时抛弃当前子段和res,从xi1重新开始上述操作。−3−1−2由于resxi。
2024-02-07 22:59:53
799
1
原创 第二类斯特林数
第二类Stirling数实际上是集合的一个拆分,表示将n个不同的元素拆分成m个集合的方案数,记为Snm或者mn.常常用于解决组合数学中几类放球模型。描述为:将n个不同的球放入m个无差别的盒子中,要求盒子非空,有几种方案?第二类StirlingSnmm!
2024-02-03 23:26:33
1420
1
原创 1701D - Permutation Restoration
每个i都有bi⌊aii⌋,我们可以将其改写如下:ai⋅bi≤iai⋅bi1, orbi1iai≤bii。从这里我们可以看出,每一个i都有一段数值可以分配给ai。因此,我们必须将1至n中的每个数字与其中的一个值段匹配起来。因此,我们对左端点排序,然后贪心地考虑,每次选择右端点最小的线段,这样的话其他线段有更多的选择空间。从1枚举到n,当枚举到i时,将每一个以i。
2024-01-21 01:28:47
1009
1
原创 1701C - Schedule Management
链接: problem这句话应该会让你立刻联想到二分。很明显,如果你能以在 ttt 时间之前完成任务的方式分配工人,那么你也能在 t+1t+1t+1 或更长时间之前完成所有任务。如何检查任务是否能在某个时间 ttt 前完成呢?这意味着所有工人都有 ttt 个小时来完成某些任务。如果所有任务都需要 222 小时才能完成,那么他们每个人都可以完成 ⌊t2⌋\lfloor \frac t 2 \rfloor⌊2t⌋ 项任务。因此,他们总共可以完成 ⌊t2⌋⋅n\lfloor \frac t 2 \rfloor
2024-01-21 00:26:30
835
1
原创 1697E - Coloring
首先不难想到把每个点向其最近点连接一条有向边,那么当一堆点可同色时,当且仅当它们构成了完全图。反之,即全部为孤立点。这时候不难想到正解:对于每个点,找出它能到的所有点,判断这些点两两之间是否都有边。表示前i个点集,用j种颜色染色,对于每一个点集,有两种方法进行染色,第一种就是点集染一个颜色,第二种就是点集中每一个点染一种颜色。也不可能是同色点,由此可推出一个可能同色的点集中的每一个点,要么颜色相同,要么互不相同。不互为最短距离点,因此不可能为同色点;为同色点,则对于任意其他点。互为最短距离点,由于。
2024-01-20 03:37:37
1151
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人