自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

星河依旧长明的博客

探索真理的火把

  • 博客(102)
  • 收藏
  • 关注

原创 【C++】 排列与组合算法详解(进阶篇)

C++排列与组合算法详解最开始,我是抱着水题解的想法写的,但却成为了阅读量最高的文章,没有之一。所以今天咱们来重制一篇文章,介绍几个进阶优化版的算法。

2023-05-20 20:06:19 4888 5

原创 【C++】关于y总代码格式的研究

【C++】关于y总代码格式的研究

2023-01-17 13:31:46 370 1

原创 【题解】洛谷 P5489 EntropyIncreaser 与 动态图

显然,树上所有边都是桥;每次加边时,若出现环,则环上所有边都不是桥。于是开两棵 LCT 分别维护割点和桥即可。,如果出现环那么将这个环上所有边权变为。具体地,初始我们将所有边权赋值为。,查询操作即转化为求路径和。求割点部分放个本人的题解。动态求割点的板子题是。

2024-02-19 11:17:26 588

原创 【题解】洛谷 P5622 [DBOI2019] 巫女的职责

具体地,若该次加边后出现了一个环,则新建一个方点,暴力删除环上所有边,并将环上所有点连向方点。这条路径的信息,发现路径上所有圆点都是割点,因此查询权值和并清空该路径上所有的点权即可。动态加边,想到使用 LCT。求割点有个很优美的数据结构:圆方树。动态加边,单点修改点权,查询两点。具体细节请看代码注释。

2024-02-19 11:16:20 390

原创 【题解】SPOJ8791 DYNALCA - Dynamic LCA

求 LCA 需要考虑树的父子关系,所以在 cut 时不能使用 makeroot 操作,而 link 无所谓。维护一个森林,支持加边、删边和求 LCA 操作。现在问题就是如何在 LCT 上求两个点。的路径的第一条边是实边,则去往。到根的路径已经变成一个实链。到根的路径上全是实边,那么。最后改变的虚边的父亲就是。的路径的第一条边是虚边。动态求 LCA 板子题。

2024-02-19 11:13:29 907

原创 【题解】洛谷 P4423 [BJWC2011] 最小三角形

时都可以在 931ms 内卡过(也有可能是我调参不够好,欢迎大佬提出更高效的参数)。根据数学直觉,在随机旋转后,答案中的三个点在数组中肯定不会离得太远。将所有点全部绕原点随机旋转同一个角度,然后按。所以我们只取每个点向后的。这样速度快得飞起,在。

2024-02-19 11:11:19 596

原创 【题解】CF1921B Arranging Cats

求将原序列变成目标序列的最小操作次数。种操作在合法的情况下一定是比进行。

2024-02-19 11:10:20 853

原创 【题解】洛谷 P5285 [十二省联考 2019] 骗分过样例

范围内所有质数,判断如果用这个质数作为模数,那么前10个数的结果是否和答案一样。级别,于是考虑暴力枚举未知的模数,然后与输出文件前若干个数比较。根据“标题相似度”,我们大致推测出本测试点是未知模数快速幂。于是我们暴力找出最小原根,然后枚举他的所有幂次即可。原根有个性质:质数的所有原根都是最小原根的一个幂。鲜花:范围有点大,我开了好几个窗口一起跑。观察输出数据,发现这次模数非常大。找输入数据中两个相差较小的数。范围内这个质数的倍数都除尽。时,输出了一些无用的东西。观察数据,发现质数的位置是。

2024-01-25 10:55:29 1021

原创 AcWing算法提高课-2.3.1矩阵距离

这种算法即为 “多源 BFS”。具体算法流程为:将所有源点都入队,然后正常跑 BFS。的位置用 BFS 向外扩展,并处理出所有的距离。给定一个 01 矩阵,求矩阵中每个元素离。列的 01 矩阵,数字之间没有空格。列的矩阵,相邻数字之间用空格隔开。发现这样的话较麻烦,于是改为考虑从。

2023-12-31 11:04:50 1058

原创 AcWing算法提高课-2.2.3抓住那头牛

假设牛没有意识到农夫的行动,站在原地不动。输出一个整数,表示抓到牛所花费的最少时间。农夫和牛都位于数轴上,农夫起始位于点。农夫知道一头牛的位置,想要抓住它。分三种情况考虑即可,注意不要越界。农夫最少要花多少时间才能抓住牛?要求时间最短,考虑 BFS。思路较简单,直接上代码。共一行,包含两个整数。

2023-12-31 10:40:50 915

原创 AcWing算法进阶课-1.17.1费用流

费用流算法本质上是 EK 算法,只不过将找增广路的 BFS 算法替换为了 SPFA 算法。图中可能存在重边和自环,保证费用不会存在负环。图,并给定每条边的容量和费用,边的容量非负。的最大流,以及在流量最大时的最小费用。的最大流和流量最大时的最小费用。存在一条有向边,容量为。

2023-12-25 13:38:08 958

原创 【题解】洛谷 P9183 [USACO23OPEN] FEB B

你想找到原始信息的兴奋程度,但你不知道约翰的信息中哪一条实际上是贝西或埃尔希的。然而,农夫约翰听说了这个消息,并试图拦截他们的谈话。,这意味着农夫约翰混淆了信息,发件人未知(贝西、埃尔希都有可能)。通过 DFS 暴力对拍,我们发现答案为一个等差数列。他们的对话可以用一个长度为。尽量相同时,方案数最大,即为数列末项。,我们考虑贪心求出等差数列首项与末项。交替放置时方案数最小,即为数列首项。行:每行一个整数,为每种兴奋程度。因此下面进行贪心时不考虑这种情况。条消息分别由贝西或埃尔希发送的。所有可能的兴奋程度。

2023-12-25 11:40:32 1361

原创 AcWing算法提高课-1.4.2股票买卖 IV

A:第一支股票第一次操作只有买或不买,一定不可能是卖或不卖,因此第一支股票买入时必须按照一次交易处理。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。注意到每次转移全部用的上一层的状态,因此我们考虑滚动数组优化,直接删掉。设计一个算法来计算你所能获取的最大利润,你最多可以完成。,表示数组的长度以及你可以完成的最大交易笔数。次,最后手里不剩股票的所有状态)。发现空间卡的很紧,容易 MLE。的正整数,表示完整的数组。输出一个整数,表示最大利润。数组的第一维,还是正确的。

2023-12-22 20:29:11 972

原创 【笔记】左偏树

左偏树本质上是一个二叉堆,支持O1O(1)O1求最值,Olog⁡nO(\log n)Ologn删除最值。不过由于它还支持Olog⁡nO(\log n)Ologn合并两个二叉堆,所以一般左偏树相关的题目都是若干棵左偏树构成森林。左偏树中每个节点维护两个值,点权vvv和与最近空节点的距离distdistdist。点权vvv满足堆性质,即当前点点权小于任意一个儿子的点权。这种二叉堆我们一般称为“小根堆”。

2023-12-21 16:51:14 1015

原创 AcWing算法提高课-2.2.2武士风度的牛

这头神奇的牛像其它牛一样喜欢吃草,给你一张地图,上面标注了 The Knight 的开始位置,树、灌木、石头以及其它障碍的位置,除此之外还有一捆草。这头牛有一个独一无二的超能力,在农场里像 Knight 一样地跳(就是我们熟悉的象棋中马的走法)。农民 John 有很多牛,他想交易其中一头被 Don 称为 The Knight 的牛。虽然这头神奇的牛不能跳到树上和石头上,但是它可以在牧场上随意跳,我们把牧场用一个。现在你的任务是,确定 The Knight 要想吃到草,至少需要跳多少次。

2023-12-21 09:52:33 830

原创 AcWing算法提高课-2.2.1迷宫问题

表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。输出从左上角到右下角的最短路线,如果答案不唯一,输出任意一条路径均可。求最短路径显然 BFS,而题目要求输出路径,所以考虑记录转移。按顺序,每行输出一个路径中经过的单元格的坐标,左上角坐标为。开始 BFS,每次扩展出的新节点维护转移的信息,最后从。开始 BFS,这样最后在转移的时候直接输出答案就好了。数据保证至少存在一条从左上角走到右下角的路径。它表示一个迷宫,其中的。

2023-12-21 09:26:51 866

原创 AcWing算法提高课-2.1.3山峰和山谷

你的任务是,对于给定的地图,求出山峰和山谷的数量,如果所有格子都有相同的高度,那么整个地图即是山峰,又是山谷。FGD 小朋友特别喜欢爬山,在爬山的时候他就在研究山峰和山谷。如果一个连通块周围没有比他高的,那他就是山峰。给定一个地图,为 FGD 想要旅行的区域,地图被分为。为了能够对旅程有一个安排,他想知道山峰和山谷的数量。若两个格子有公共顶点,那么它们就是相邻的格子,如与。共一行,包含两个整数,表示山峰和山谷的数量。的矩阵,表示地图上每个格子的高度。

2023-12-21 09:05:35 962

原创 AcWing算法提高课-1.4.1大盗阿福

阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。该行包含一个整数,表示阿福在不惊动警察的情况下可以得到的现金数量。作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。他想知道,在不惊动警察的情况下,他今晚最多可以得到多少现金?个被空格分开的正整数,表示每一家店铺中的现金数量。接下来的每组数据,第一行是一个整数。家店铺,每家店中都有一些现金。家店铺行窃,获得的现金数量为。家店铺行窃,获得的现金数量为。

2023-12-20 20:53:19 858

原创 AcWing算法进阶课-1.9.1Dinic/ISAP求最小割

Dinic 算法其实是 EK 算法的一个暴力的优化,EK 算法每次只能搜索一条增广路径,而 Dinic 算法每次都用 DFS 的形式尽可能多的搜索增广路径。而图中可能存在环,为了保证 DFS 的过程中不会造成死循环,这里可以使用分层图,这样每次都是一层一层往下搜索,就不会出现死循环。: Dinic 算法对于优化非常敏感,如果优化的不好就可能直接 TLE。因此要求最小割,只需求原图的最大流即可。图,并给定每条边的容量,边的容量非负。存在一条有向边,容量为。

2023-12-20 20:07:33 963

原创 AcWing算法进阶课-1.1.2Dinic/ISAP求最大流

Dinic 算法其实是 EK 算法的一个暴力的优化,EK 算法每次只能搜索一条增广路径,而 Dinic 算法每次都用 DFS 的形式尽可能多的搜索增广路径。而图中可能存在环,为了保证 DFS 的过程中不会造成死循环,这里可以使用分层图,这样每次都是一层一层往下搜索,就不会出现死循环。: Dinic 算法对于优化非常敏感,如果优化的不好就可能直接 TLE。图,并给定每条边的容量,边的容量非负。图中可能存在重边和自环。存在一条有向边,容量为。

2023-12-20 19:58:15 830

原创 AcWing算法进阶课-1.1.1EK求最大流

图,并给定每条边的容量,边的容量非负。循环不断找残量网络中的增广路径。图中可能存在重边和自环。存在一条有向边,容量为。跳出循环即得出最大流。

2023-12-20 19:34:25 906

原创 【笔记】网络流算法模板

Dinic 算法其实是 EK 算法的一个暴力的优化,EK 算法每次只能搜索一条增广路径,而 Dinic 算法每次都用 DFS 的形式尽可能多的搜索增广路径。而图中可能存在环,为了保证 DFS 的过程中不会造成死循环,这里可以使用分层图,这样每次都是一层一层往下搜索,就不会出现死循环。因此跑最大流的 Dinic 板子即可,代码没有任何区别,就不再放了。图,并给定每条边的容量和费用,边的容量非负。的最大流,以及在流量最大时的最小费用。图,并给定每条边的容量,边的容量非负。图,并给定每条边的容量,边的容量非负。

2023-12-20 19:25:47 838

原创 【笔记】网络流基本概念

流网络:由一些点和有向边组成的可以有环的图,记作 G=(V,E)G=(\text V,\text E)G=(V,E),其中 V\text VV 是点集,E\text EE 是边集。定义 n=∣V∣,m=∣E∣n=|\text V|,m=|\text E|n=∣V∣,m=∣E∣,在本篇文章中使用。源点:在一个流网络中,入度为 000 且能流出的流量为 ∞\infty∞ 的点。一般用斜体大写字母 SSS 表示。汇点:在一个流网络中,出度为 000 且能流入的流量为 ∞\infty∞ 的点。一般用斜体大写字母 T

2023-12-20 17:34:57 1580

原创 AcWing算法提高课-4.1.3程序自动分析

的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足。最后判断不等条件,如果两个变量在同一个连通块内但有不等条件约束,那就不合法。,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足。在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。先处理“相等”的约束条件,由于可以连等,我们考虑并查集维护。,表示需要判定的问题个数,注意这些问题之间是相互独立的。,表示该问题中需要被满足的约束条件个数。个问题判定为可以被满足,

2023-12-20 13:57:00 847

原创 AcWing算法提高课-4.1.2搭配购买

但是商店老板跟他说,一些云朵要搭配来买才好,所以买一朵云则与这朵云有搭配的云都要买。考虑使用并查集进行缩点,然后对于所有连通块跑 0-1 背包。Joe觉得云朵很美,决定去山上的商店买一些云朵。但是Joe的钱有限,所以他希望买的价值越多越好。一行,表示可以获得的最大价值。,并且每朵云都有一个价值。一个比较板子的有依赖背包。

2023-12-20 13:28:38 900

原创 【笔记】Splay 详细解读

Splay 是一种平衡树,并且是一棵二叉搜索树(BST)。它满足对于任意节点,都有左子树上任意点的值 < 当前节点的值 < 右子树上任意点的值。优点:支持多种操作。缺点:常数较大。单次操作均摊复杂度Olog⁡nO(\log n)Ologn。(注:关于 Splay 单次操作均摊复杂度的证明见OI-WikiSplay 基于旋转操作维护树的平衡。旋转分为左旋 (zag) 和右旋 (zig)。旋转,即在保证平衡树中序遍历不变的前提下,改变整个树的深度。

2023-12-20 12:45:49 1547 2

原创 AcWing算法提高课-4.1.1格子游戏

注意到如果最终成环,那么最后一次连接的时候两个端点在同一个连通块内。)为止,“封圈”的那个人就是赢家。因为棋盘实在是太大了,他们的游戏实在是太长了!,代表了画线的起点坐标,接着用空格隔开一个字符,假如字符是。Alice 和 Bob 玩了一个古老的游戏:首先画一个。于是请你写一个程序,帮助他们计算他们是否结束了游戏?对于连通块的问题,我们使用并查集解决。输出一行:在第几步的时候结束。,则是向下连一条边,如果是。行,每行首先有两个数字。,因此预处理是瓶颈。

2023-12-20 11:51:56 888

原创 【题解】洛谷 P2353 背单词

小明对英语一窍不通,令老师十分头疼。于是期末考试前夕,小明被逼着开始背单词……为了确保小明不会在背单词时睡着,老师会向他提。,小明要回答在这段文字中他背过的单词总共出现过多少次。提示:数据较大,请大家尽量采取高效率的读入输出方法。不过接下来我们发现它不满足区间减法,也就是不能通过。个问题,每次老师随机选择一个区间。中,但不能保证右端点也在此区间中。行每行一个需要背的单词。行,对每个询问输出一行表示答案。(含端点),即给定的文字区间。的英语文章,然后让小明背。KMP 字符串匹配,前缀和。

2023-12-20 11:40:53 934

原创 【题解】2023-11-11 B层模拟赛T1

他想要保证每个部分里面有且仅有一个黑节点。树上的节点有两种:黑,白节点。Tyk 想断掉一些边把树分成很多部分。输出一个数字,表示总方案数。请问他一共有多少种的方案?,表示树的节点个数。

2023-11-11 10:55:04 156

原创 AcWing算法提高课-5.6.2青蛙的约会

为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。否则,根据余数的性质,方程。

2023-10-18 10:05:56 263

原创 AcWing算法提高课-4.3.4一个简单的整数问题2

当进行区间修改时,只修改当前区间,而它的子节点的修改先欠着,等用到了子节点的时候再往下传。如果这个节点有懒标记,就把懒标记加到子节点的懒标记中,并把当前节点的懒标记清空。条指令,每条指令的格式如题目描述所示。对于每个询问,输出一个整数表示答案。对于每个询问,输出一个整数表示答案。差不多,修改懒标记和区间和。

2023-10-13 11:31:46 88

原创 AcWing算法提高课-5.6.1同余方程

由于题目要求输出正整数解,所以我们输出。我们知道,扩展欧几里得算法可以计算形如。输入只有一行,包含两个正整数。输出只有一行,包含一个正整数。输入数据保证一定有解。所以直接进行转化即可。,表示最小正整数解。

2023-10-04 12:01:37 265

原创 【笔记】Splay 详细解读

Splay 是一种平衡树,并且是一棵二叉搜索树(BST)。它满足对于任意节点,都有左子树上任意点的值 < 当前节点的值 < 右子树上任意点的值。优点:支持多种操作。缺点:常数较大。单次操作均摊复杂度Olog⁡nO(\log n)Ologn。(注:关于 Splay 单次操作均摊复杂度的证明见OI-WikiSplay 基于旋转操作维护树的平衡。旋转分为左旋 (zag) 和右旋 (zig)。旋转,即在保证平衡树中序遍历不变的前提下,改变整个树的深度。

2023-09-27 18:51:06 937

原创 AcWing算法提高课-4.3.2你能回答这些问题吗

要求一段区间的最大连续子段和,我们思考要维护哪些信息。对于每个查询指令,输出一个整数表示答案。对于每个查询指令输出一个整数表示答案。此时我们发现还应该维护每个区间的。我们发现,应该维护每个区间的。线段树单点修改区间查询,此情况与“2”同理。

2023-09-26 12:00:00 83

原创 AcWing算法提高课-4.3.1最大数

是在这个添加操作之前最后一个询问操作的答案(如果之前没有询问操作,则。线段树板子,虽然强制在线了,但是对于在线的线段树来说没什么影响。对于每一个询问操作,输出一行。该行只有一个数,即序列中最后。写一个程序,读入操作的序列,并输出询问操作的答案。,则表示向序列后面加一个数,加入的数是。第一个操作一定是添加操作。,则表示这个操作是询问序列中最后。不过是把求和换成求最大值而已,把。程序运行的最开始,整数序列为空。行,每一行表示一个操作。且不超过当前序列的长度。

2023-09-25 18:14:47 110

原创 第118题

OA4直线x2−2ab​2b4y−x24x。

2023-09-01 21:10:09 70

原创 AcWing算法提高课-5.5.2最大公约数

这里不再进行推导,读者可以自行点击上方链接进行阅读。输出一个整数,表示满足条件的数对数量。的所有质因数进行计算就不会超时。已经是常识,所以很有必要写一条。此时进行计算,时间复杂度近似为。可以考虑预处理欧拉函数前缀和。

2023-08-27 12:19:20 188 1

原创 AcWing算法提高课-5.5.1可见的点

对于正整数n,欧拉函数是小于n的正整数中与n互质的数的数目.的连线中没有通过其他任何点,则称该点在原点处是可见的。对称,所以我们只要统计上面一半(或下面)然后把答案。在一个平面直角坐标系的第一象限内,如果一个点。就是不可见的,因为它与原点的连线会通过点。的欧拉函数,然后直接进行计算即可。每组测试数据占一行,包含一个整数。的数量(可见点不包括原点)。开始),该组测试数据对应的。每组测试数据的输出占据一行。应包括:测试数据的编号(从。所以整个图能看见的点的数量为。

2023-08-26 14:56:50 138

原创 AcWing算法提高课-5.1.1哥德巴赫猜想

但是作者因为考虑到题解的严谨性,还是写了无解情况的判断。虽然哥德巴赫猜想没有被证明,但是通过我们暴力算法的验证,我们发现在。现在,你的任务是验证所有小于一百万的偶数能否满足哥德巴赫猜想。观察数据范围,我们发现,需要复杂度最高是。的所有质数,然后从第一个开始枚举。的偶数都可以拆成两个奇素数之和。所以我们考虑使用线性筛预处理出。每组数据占一行,包含一个偶数。显然这是一道关于质数的题。的范围内的哥德巴赫猜想。对于每组数据,输出形如。最后我们考虑无解的情况。

2023-08-13 12:00:00 153

原创 AcWing算法提高课-4.2.3一个简单的整数问题2

给定一个长度为 NNN 的数列 AAA,以及 MMM 条指令,每条指令可能是以下两种之一:对于每个询问,输出一个整数表示答案。第一行两个整数 N,MN,MN,M。第二行 NNN 个整数 A[i]A[i]A[i]。接下来 MMM 行表示 MMM 条指令,每条指令的格式如题目描述所示。对于每个询问,输出一个整数表示答案。每个答案占一行。1≤N,M≤1051 \le N,M \le 10^51≤N,M≤105,∣d∣≤10000|d| \le 10000∣d∣≤10000,∣A[i]∣≤109|A[i]| \

2023-08-12 12:00:00 241

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除