自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

闻缺陷则喜何志丹

本人拙作《闻缺陷则喜》欢迎指教,可在优快云下载

  • 博客(2016)
  • 资源 (86)
  • 收藏
  • 关注

原创 【倍增 桶排序】后缀数组

桶排序优化按v升序将sa[inx+len]放到sa[inx]中。 v由于已经是升序,故各桶内部无需排序。每轮时间复杂度:O(N),总时间复杂度:O(NlogN)。# DC

2025-08-21 07:00:00 853 52

原创 【BFS 动态规划】P12382 [蓝桥杯 2023 省 Python B] 树上选点|普及+

给定一棵树,树根为 $1$,每个点的点权为 $V_i$。你需要找出若干个点 $P_i$,使得:1. 每两个点 $P_x,P_y$ 互不相邻;2. 每两个点 $P_x,P_y$ 与树根的距离互不相同;3. 找出的点的点权之和尽可能大。请输出找到的这些点的点权和的最大值。

2025-08-18 07:00:00 1342 65

原创 【BFS】P9065 [yLOI2023] 云梦谣|普及+

“喂,枸杞,你这只笨狗,又偷吃!看我不收拾你!”朵一气呼呼地从院子里跑出来,手中握着掸子,而枸杞早已不见踪影。云梦庭可以看作一个 $n$ 行 $m$ 列的方格阵,第 $i$ 行第 $j$ 列的格子被记作 $(i,j)$。每个格子 $(i,j)$ 要么有一个高度 $h_{i,j}$($h_{i,j}$ 为正整数),要么是障碍物,不能通过。(方便起见,约定障碍物的 $h_{i,j}$ 用 $0$ 表示。)另外,云梦庭上有 $k$ 个指定的格子上可以进行**御剑飞行**。开始时,朵一和枸杞分别位于方格 $

2025-08-14 07:00:00 2126 68

原创 【组合数学 动态规划】3343. 统计平衡排列的数目|2615

给你一个字符串 num 。如果一个数字字符串的奇数位下标的数字之和与偶数位下标的数字之和相等,那么我们称这个数字字符串是 平衡的 。请你返回 num 不同排列 中,平衡 字符串的数目。由于答案可能很大,请你将答案对 109 + 7 取余 后返回。一个字符串的 排列 指的是将字符串中的字符打乱顺序后连接得到的字符串。示例 1:输入:num = "123"输出:2解释:num 的不同排列包括: "123" ,"132" ,"213" ,"231" ,"312" 和 "321" 。它们之中,"1

2025-08-22 15:30:00

原创 【逆向思考】3352. 统计小于 N 的 K 可约简整数|2451

给你一个 二进制 字符串 s,它表示数字 n 的二进制形式。同时,另给你一个整数 k。如果整数 x 可以通过最多 k 次下述操作约简到 1 ,则将整数 x 称为 k-可约简 整数:将 x 替换为其二进制表示中的置位数(即值为 1 的位)。例如,数字 6 的二进制表示是 "110"。一次操作后,它变为 2(因为 "110" 中有两个置位)。再对 2(二进制为 "10")进行操作后,它变为 1(因为 "10" 中有一个置位)。返回小于 n 的正整数中有多少个是 k-可约简 整数。由于答案可能很大,返

2025-08-22 08:23:06 432

原创 【组合数学 数论 递推逆元】P11616 [PumpkinOI Round 1] 瓦解|普及+

你手上有一个长为 $n$ 的数列 $a$。小 Q 想让你将其分成不超过 $m$ 段**非空**连续段,且每段内数字**严格单调递增**。现在小 Q 想知道一共有几种划分方案。由于方案数可能很大,你只需要告诉她方案数对 $998244353$ 取模的结果。

2025-08-21 17:00:00 425 4

原创 【高精度 大根堆】P11523 [THUPC 2025 初赛] 摊位分配|普及+

T 大学拥有数不胜数的优秀社团,例如核心成员达到 118 人的酸协(Students' Association of Acid),刚成立就饱受关注的篹协(Students' Association of Bamboo Basket),当然还有名扬四海的蒜协(Students' Association of Garlic)。每学期伊始,T 大学都会统一举办全校性的社团招新活动。招新活动因规模庞大,故又被称为“百团大战”。如何把有限的场地像希尔伯特旅馆一般分配给各个社团,总是百团大战的负责人最头疼的问题。今年的

2025-08-20 17:00:00 756 1

原创 P2407 [SDOI2009] 地图复原|省选-

很久以前,有一个传说中的“EWF”部族,他们世代生活在一个N×M的矩形大地上。虽然,生活的地区有高山、有沼泽,但通过勤劳勇敢,渐渐地,他们在自己的地盘上修筑了一条回路。后来,“EWF”部族神秘地消失了。不过,考古学家在那片他们曾经生活过的地方找到了一份地图。地图是N×M的矩阵,左上角的坐标为(0, 0),右下角的坐标为(N, M)。矩阵中的每个格子,表示高山、沼泽、平地、房屋或是道路其中之一。如果一个格子表示道路,那么经过这个格子的道路要么是直走,要么是拐弯。如下图,左边2幅表示直走格子的,右边4幅表示

2025-08-20 07:00:00 636

原创 【线性基】P4301 [CQOI2013] 新Nim游戏|省选-

传统的 Nim 游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同)。两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴。可以只拿一根,也可以拿走整堆火柴,但不能同时从超过一堆火柴中拿。拿走最后一根火柴的游戏者胜利。本题的游戏稍微有些不同:在第一个回合中,双方可以直接拿走若干个整堆的火柴。可以一堆都不拿,但不可以全部拿走。从第二个回合(又轮到第一个游戏者)开始,规则和 Nim 游戏一样。如果你先拿,怎样才能保证获胜?如果可以获胜的话,还要让第一回合拿的火柴总数尽量小。

2025-08-19 17:00:00 1529 1

原创 【数论 调和级数 容斥原理】3312. 查询排序后的最大公约数|2533

给你一个长度为 n 的整数数组 nums 和一个整数数组 queries 。gcdPairs 表示数组 nums 中所有满足 0 <= i < j < n 的数对 (nums[i], nums[j]) 的 最大公约数 升序 排列构成的数组。对于每个查询 queries[i] ,你需要找到 gcdPairs 中下标为 queries[i] 的元素。请你返回一个整数数组 answer ,其中 answer[i] 是 gcdPairs[queries[i]] 的值。gcd(a, b) 表示 a 和 b 的

2025-08-19 07:00:00 996 2

原创 【图论 次短路】P1491 集合位置|省选-

每次有大的活动,大家都要在一起“聚一聚”,不管是去好乐迪,还是避风塘,或者汤姆熊,大家都要玩的痛快。还记得心语和花儿在跳舞机上的激情与释放,还记得草草的投篮技艺是如此的高超,还记得狗狗的枪法永远是 S ……还有不能忘了,胖子的歌声永远是让我们惊叫的!!今天是野猫的生日,所以想到这些也正常,只是因为是上学日,没法一起去玩了。但回忆一下那时的甜蜜总是一种幸福嘛。。。但是每次集合的时候都会出现问题!野猫是公认的“路盲”,野猫自己心里也很清楚,每次都提前出门,但还是经常迟到,这点让大家很是无奈。后来,野猫在

2025-08-18 17:00:00 1827 1

原创 【位运算】查询子数组最大异或值|2693

给你一个由 n 个整数组成的数组 nums,以及一个大小为 q 的二维整数数组 queries,其中 queries[i] = [li, ri]。对于每一个查询,你需要找出 nums[li..ri] 中任意 子数组 的 最大异或值。数组的异或值 需要对数组 a 反复执行以下操作,直到只剩一个元素,剩下的那个元素就是 异或值:对于除最后一个下标以外的所有下标 i,同时将 a[i] 替换为 a[i] XOR a[i + 1] 。移除数组的最后一个元素。返回一个大小为 q 的数组 answer,其

2025-08-17 21:00:00 765 1

原创 【状压DP】3276. 选择矩阵中单元格的最大得分|2403

给你一个由正整数构成的二维矩阵 grid。你需要从矩阵中选择 一个或多个 单元格,选中的单元格应满足以下条件:所选单元格中的任意两个单元格都不会处于矩阵的 同一行。所选单元格的值 互不相同。你的得分为所选单元格值的总和。返回你能获得的 最大 得分。示例 1:输入: grid = [[1,2,3],[4,3,2],[1,1,1]]输出: 8解释:选择上图中用彩色标记的单元格,对应的值分别为 1、3 和 4 。示例 2:输入: grid = [[8,7,6],[8,3,2]]输出: 1

2025-08-17 20:59:06 604

原创 P3812 【模板】线性基|省选-

给定 $n$ 个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。

2025-08-16 17:00:00 599 2

原创 【BFS 重构树】P11907 [NHSPC 2023] F. 恐怖的黑色魔物|省选-

G 公司最近用黑科技在某个神秘的地方建立了新的研发中心。这座研发中心的形状是长方体,内部共有 $F$ 层楼,每一层楼均有由 $M$ 列 $N$ 行组成的矩形房间。一个房间的位置用三个正整数 $(p, q, r)$ 表示,代表该房间位于研发中心 $p$ 楼的第 $q$ 列第 $r$ 行。G 公司的员工均可以通过黑科技直接传送到隔壁、楼下或楼上的房间。更明确地说,位于房间 $(p, q, r)$ 的 G 公司员工,1. 当 $p > 1$ 时,可以传送到房间 $(p-1, q, r)$。1. 当 $p

2025-08-16 07:00:00 926

原创 【动态规划 完全背包 卡常】P9743 「KDOI-06-J」旅行|普及+

小 C 在 C 国旅行。C 国有 $n\times m$ 个城市,可以看做 $n\times m$ 的网格。定义 $(i,j)$ 表示在网格中第 $i$ 行第 $j$ 列的城市。该国有 $2$ 种交通系统:* 对于所有 $1\leq i<n,1\leq j\leq m$,$(i,j)$ 到 $(i+1,j)$ 有一段由 L 公司修的单向铁路;* 对于所有 $1\leq i\leq n,1\leq j<m$,$(i,j)$ 到 $(i,j+1)$ 有一段由 Z 公司修的单向铁路;在每一个城市

2025-08-15 15:30:00 1142 1

原创 【扩展KMP 跳跃游戏】3292. 形成目标字符串需要的最少字符串数 II|2662

给你一个字符串数组 words 和一个字符串 target。如果字符串 x 是 words 中 任意 字符串的 前缀,则认为 x 是一个 有效 字符串。现计划通过 连接 有效字符串形成 target ,请你计算并返回需要连接的 最少 字符串数量。如果无法通过这种方式形成 target,则返回 -1。 示例 1:输入: words = ["abc","aaaaa","bcdef"], target = "aabcdabc"输出: 3解释:target 字符串可以通过连接以下有效

2025-08-15 07:00:00 935 1

原创 【C#】Thread.Abort关闭是整个线程还是线程树的试验

本文通过WinForm项目演示了线程终止的实际效果。实验结果表明,Thread.Abort()仅终止指定线程,不会影响该线程启动的其他线程或任务。实验设置了两组按钮响应函数:第一组正常执行嵌套线程任务,第二组立即终止主线程。调试发现,立即终止时仅主线程退出,而延迟100ms后终止则允许子线程完成。结论指出线程终止的局限性,强调需要单独处理嵌套线程的终止。

2025-08-14 17:00:00 657 2

原创 【重构树】P9638 「yyOI R1」youyou 的军训|省选-

youyou 的班上一共有 $n$ 位同学,$m$ 对朋友,第 $i$ 对朋友关系对于身高有一个敏感值 $k_i$,敏感值可能会改变。我们定义两位同学如果互为**朋友**,那么必然存在某对关系,将两位同学**直接**相连。我们定义两位同学如果互为**好友**,那么必然存在直接或间接的关系,将两位同学相连。例如存在关系 $(1,2)$ 和 $(2,3)$,那么,$1$ 与 $2$ 是朋友,但 $1$ 与 $3$ 就是好友。现在,马上就要军训了,同学们要去领军训的服装,如果一位同学领到了尺码为

2025-08-13 17:00:00 1263

原创 【线性基 贪心】P4570 [BJWC2011] 元素|省选-

相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术。那时人们就认识到,一个法杖的法力取决于使用的矿石。一般地,矿石越多则法力越强,但物极必反:有时,人们为了获取更强的法力而使用了很多矿石,却在炼制过程中发现魔法矿石全部消失了,从而无法炼制出法杖,这个现象被称为“魔法抵消” 。特别地,如果在炼制过程中使用超过一块同一种矿石,那么一定会发生“魔法抵消”。后来,随着人们认知水平的提高,这个现象得到了很好的解释。经过了大量的实验后,著名法师 Dmitri 发现:如

2025-08-13 07:00:00 714

原创 【ad-hoc 最小生成树 构造】P8957 「CGOI-3」巫泡弹弹乐|普及+

弹弹乐由 $n$ 个弹力菇组成,每个弹力菇有 $a,b$ 两个属性。对于弹力菇 $i$ 会向弹力菇 $j$ 连一条边权为 $\max(a_i,a_j)+\max(b_i,b_j)$ 的双向弹力通道。现在 mc 想知道弹力菇组成的图的最小生成树,以便他打破记录。

2025-08-12 17:00:00 843 1

原创 【缩点 分层图】P1073 [NOIP 2009 提高组] 最优贸易|省选-

$C$ 国有 $n$ 个大城市和 $m$ 条道路,每条道路连接这 $n$ 个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 $m$ 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为 $1$ 条。$C$ 国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价格不一定相同。但是,同一种商品在同一个城市的买入价和卖出价始终是相同的。商人阿龙来到 $C$ 国旅游。当他得知同一种商品在不同城市的价格可能会不同这一信息之后,便决定在

2025-08-12 07:00:00 581 1

原创 【线性基】 P3857 [TJOI2008] 彩灯|省选-

Peter 女朋友的生日快到了,他亲自设计了一组彩灯,想给女朋友一个惊喜。已知一组彩灯是由一排 $N$ 个独立的灯泡构成的,并且有 $M$ 个开关控制它们。从数学的角度看,这一排彩灯的任何一个彩灯只有亮与不亮两个状态,所以共有 $2^N$ 个样式。由于技术上的问题,Peter 设计的每个开关控制的彩灯没有什么规律,当一个开关被按下的时候,它会把所有它控制的彩灯改变状态(即亮变成不亮,不亮变成亮)。假如告诉你他设计的每个开关所控制的彩灯范围,你能否帮他计算出这些彩灯有多少种样式可以展示给他的女朋友?注:

2025-08-11 17:00:00 856 2

原创 【BFS 树状数组】P9026 [CCC 2021 S4] Daily Commute|普及+

已知有 $N$ 个地铁站,你家在 $1$,学校在 $N$。有 $W$ 条单向人行道。经过需要一分钟。此外还有一条环形地铁线路,依次经过 $S_1,S_2,\cdots,S_N$,且保证 $S_1=1$。每天**有且仅有**一辆地铁在 $0$ 时刻从 $S_1$ 出发,并且恰好在第 $i$ 分钟到达 $S_i$。在接下来 $D$ 天中:- 交换 $S_{X_i}$ 和 $S_{Y_i}$。注意修改是永久的。- 查询从 $1$ 到 $N$ 的最短用时。你出发时地铁在 $1$。

2025-08-11 07:00:00 1200 72

原创 【分治法 最短路】 P1772 [ZJOI2006] 物流运输|省选-

物流公司要把一批货物从码头 A 运到码头 B。由于货物量比较大,需要 $n$ 天才能运完。货物运输过程中一般要转停好几个码头。 物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪。由于各种因素的存在,有的时候某个码头会无法装卸货物。这时候就必须修改运输路线,让货物能够按时到达目的地。 但是修改路线是—件十分麻烦的事情,会带来额外的成本。因此物流公司希望能够订一个 $n$ 天的运输计划,使得总成本尽可能地小。## 输入格式第一行是四个整数 $n,m,k,e$。$n

2025-08-10 18:15:00 958 1

原创 【数论】周赛464Q4. 下一个特殊回文数|???

如果一个数满足以下条件,那么它被称为 特殊数 :它是一个 回文数 。数字中每个数字 k 出现 恰好 k 次。返回 严格 大于 n 的 最小 特殊数。如果一个整数正向读和反向读都相同,则它是 回文数 。例如,121 是回文数,而 123 不是。

2025-08-10 14:00:42 742

原创 【贪心】P4873 [USACO14DEC] Cow Jog G|省选-

Farmer John 的 $ N $ 头奶牛 $ ( 1 ≤ N ≤ 10^5 ) $ 正在一条长度无限的跑道上慢跑,每头奶牛都有一个不同的开始位置,以及不同的跑步速度。为了方便奶牛们互相超越,整个跑道被分成了若干条赛道。在同一时刻,不可能有在同一条赛道上的两头奶牛占据相同的位置。现在奶牛们要跑 $ T $ 分钟,在跑步过程中,他们不会改变自己所在的赛道和自己跑步的速度。FJ想要知道,为了奶牛间不会发生冲突,他需要至少准备多少条赛道。

2025-08-09 17:00:00 946

原创 【最短路】P1930 [USACO3.3] 亚瑟王的宫殿|省选-

很久以前,亚瑟王和他的骑士习惯每年元旦去庆祝他们的友谊。为了纪念上述事件, 我们把这些故事看作是一个棋盘游戏。有一个国王和若干个骑士被放置在一个由许多方格 组成的棋盘上,没有两个骑士在同一个方格内。这个例子是标准的 $8\times 8$ 棋盘。![](https://i-blog.csdnimg.cn/img_convert/e7051549f1bb39573f050200efae0e26.png)国王可以移动到任何一个相邻的方格,从下图中黑子位置到下图中白子位置前提是他 不掉出棋盘之外。

2025-08-09 07:00:00 1155

原创 【同余最短路】P2371 [国家集训队] 墨墨的等式|省选-

墨墨突然对等式很感兴趣,他正在研究 $\sum_{i=1}^n a_ix_i=b$ 存在非负整数解的条件,他要求你编写一个程序,给定 $n, a_{1\dots n}, l, r$,求出有多少 $b\in[l,r]$ 可以使等式存在非负整数解。

2025-08-08 17:00:00 1666 3

原创 【BFS 拓扑序】P9534 [YsOI2023] 广度优先遍历|省选-

如你所见,这份代码会输入一个 $n$ 个点 $m$ 条边的无向图,并且求出这张图以 $1$ 为根的一棵“广度优先遍历树”,最后输出所有点的父亲节点编号。不过值得注意的是,这棵“广度优先遍历树”的具体形态和“边的输入顺序”有关,也就是说,不同的输入顺序可能会得到不同的父亲节点编号。现在【数据删除】告诉了你 $n,m$、这 $m$ 条边以及在某个“边输入顺序”情况下他的代码的输出,你需要还原出这个“边输入顺序”。如果有多种边输入顺序对应的都是这样的输出,你**只需要输出其中任意一种**即可。特别的,

2025-08-08 07:00:00 774 1

原创 【博弈 拓扑序 缩点】P9220 「TAOI-1」椎名真昼|省选-

你正在看轻小说,突然你的家长走了进来,于是你假装在写 OI 题目。Alice 和 Bob 正在玩一款游戏,给定一个有向图,每个点初始有一个颜色(黑或白)。双方轮流进行操作,Alice 先手,每次操作选定一个节点,将所有从该点开始,能到达的点(包括自身)颜色翻转。如果某次操作后所有节点都变为白色,则进行该次操作的人胜利。假如双方都采用最优策略使得自己胜利,或者如果自己无法胜利,使得对方无法胜利。给你节点的初始状态,请你求出最终的胜者,亦或者,没有胜者。---定义点 $u$ 能到达点 $

2025-08-07 17:00:00 557

原创 【缩点 拓扑序】P3119 [USACO15JAN] Grass Cownoisseur G|省选-

为了更好地管理牛群的放牧路线,Farmer John 在他的农场中安装了若干单向牛道。农场由 $N$ 块草场组成,编号为 $1$ 到 $N$,每条单向牛道连接一对草场。例如,若存在一条从草场 $X$ 到 $Y$ 的路径,则牛可以从 $X$ 前往 $Y$,但不能从 $Y$ 返回 $X$。众所周知,Bessie 喜欢尽可能多地品尝不同草场的牧草。她每天从草场 $1$ 出发,访问一系列草场后返回草场 $1$。她试图最大化沿途经过的不同草场数量(重复访问的草场只算一次)。由于单向路径的限制,Bessie 担

2025-08-07 08:25:48 2016 56

原创 【拓扑序】P7845 「dWoi R2」Change / 改造|省选-

在经过 $99$ 次的 Replay 后,沙耶终于发现迷宫是一个有向无环图。为了保证最后一次 Replay 的趣味性,时风瞬给沙耶和理树安排了一个小游戏。这张有向无环图 $G$ 有 $n$ 个点,$m$ 条边,每条边的长度为 $1$。设 $l_i$ 为初始点 $s$ 到第 $i$ 条边所指向的点 $u$ 的最短路,定义第 $i$ 条边的边权为 $p-l_i$。游戏步骤是这样的(所有选择都是按如下顺序进行,并且每个人的选择都是公开的)。1. 理树站在点 $s$ 上。 2. 时风瞬会随机选取一个点作

2025-08-06 17:00:00 1748

原创 【拓扑序 唯一分解定理】P6381 『MdOI R2』Odyssey|省选-

若正整数 $a$ 与 $b$ 满足:- $a$ 与 $b$ 的积是一个正整数的 $k$ 次方,即存在正整数 $c$ 使得 $ab=c^k$。那么我们称 $(a,b)$ 为一组**完美数对**。---有一个包含 $n$ 个结点和 $m$ 条边的**有向无环图**,这张图中的每条边都有权值和长度两个属性。如果一条路径 $P$ 满足**以下条件之一**,则称其为一条**完美路径**:- $P$ 中仅包含一条边。- $P$ 从其起点开始依次为 $e_1, e_2, e_3, \ldots

2025-08-06 07:00:00 857 1

原创 【拓扑序】P6286 [COCI 2016/2017 #1] Cezar|省选-

Mirko 想对 $n$ 个单词进行加密。加密过程是这样的:1. 选择一个英文字母表的排列作为密钥。2. 将单词中的 `a` 替换为密钥中的第一个字母,`b` 替换为密钥中的第二个字母……以此类推。例如,以 `qwertyuiopasdfghjklzxcvbnm` 作为密钥对 `cezar` 加密后,将得到 `etmqk`。他希望,将所有单词加密并按字典序升序排列后,最初的第 $a_i$ 个单词位于第 $i$ 位。请你判断,这能否实现。如果能,请给出任意一种可行的密钥。

2025-08-05 17:00:00 588

原创 【拓扑序 位集】P6134 [JSOI2015] 最小表示|省选-

对于一个 $N$ 个点(每个点从 $1$ 到 $N$ 编号),$M$ 条边的有向图,JYY 发现,如果从图中删去一些边,那么原图的连通性会发生改变;而也有一些边,删去之后图的连通性并不会发生改变。JYY 想知道,如果想要使得原图任意两点的连通性保持不变,我们最多能删掉多少条边呢?为了简化一下大家的工作量,这次 JYY 保证他给定的有向图一定是一个有向无环图(JYY:大家经过去年的问题,都知道对于给任意有向图的问题,最后都能转化为有向无环图上的问题,所以今年 JYY 就干脆简化一下大家的工作)。

2025-08-05 07:00:00 1585

原创 【拓扑序 时间倒流法】P7077 [CSP-S2020] 函数调用|省选-

函数是各种编程语言中一项重要的概念,借助函数,我们总可以将复杂的任务分解成一个个相对简单的子任务,直到细化为十分简单的基础操作,从而使代码的组织更加严密、更加有条理。然而,过多的函数调用也会导致额外的开销,影响程序的运行效率。某数据库应用程序提供了若干函数用以维护数据。已知这些函数的功能可分为三类:1. 将数据中的指定元素加上一个值;2. 将数据中的每一个元素乘以一个相同值;3. **依次**执行若干次函数调用,保证不会出现递归(即不会直接或间接地调用本身)。在使用该数据库应用时,用户可一次

2025-08-04 17:00:00 1575

原创 【拓扑序 容斥原理】P6651 「SWTR-5」Chain|省选-

给定 $n$ 个点,$m$ 条边的有向无环图。不保证图连通。$q$ 次询问,每次给出 $k$ 和 $k$ 个互不相同的数 $c_i$,求出如果去掉这 $k$ 个点,整个有向无环图将剩余多少条链。答案对 $10^9+7$ 取模。**每次询问独立。**- “链”的定义是:我们设一条长度为 $p$ 的链的路径为 $w_0\to w_1\to\cdots\to w_{p-1}\to w_p$,则应满足 $w_0$ 入度为 $0$,$w_p$ 出度为 $0$。你可以将其理解为一条食物链。- 两条链是“不

2025-08-04 07:00:00 1005 64

原创 【拓扑序 二分】P4376 [USACO18OPEN] Milking Order G|省选-

Farmer John 的 $N$ 头奶牛($1 \leq N \leq 10^5$),编号为 $1 \ldots N$,最近闲得发慌。因此,她们发展了一个与 Farmer John 每天早上为她们挤牛奶时的排队顺序相关的复杂社会阶层。经过若干周的研究,Farmer John 对他的奶牛的社会结构总计进行了 $M$ 次观察($1 \leq M \leq 50,000$)。每个观察结果都是某些奶牛的一个有序序列,表示这些奶牛应该按照序列中的顺序进行挤奶。例如,如果 Farmer John 的一次观察结果是

2025-08-03 17:00:00 646

原创 【缩点 拓扑排序】P3436 [POI 2006] PRO-Professor Szu|省选-

某大学校内有一栋主楼,还有 $n$ 栋住宅楼。这些楼之间由一些单向道路连接,但是任意两栋楼之间可能有多条道路,也可能存在起点和终点为同一栋楼的环路。存在住宅楼无法到达主楼的情况,但**保证至少有一间宿舍和主楼之间存在路径**。现在有一位古怪的教授,他希望每天去主楼上班的路线不同。一条上班路线中,每栋楼都可以访问任意多次。我们称两条上班路线是**不同的**,当且仅当两条路线中存在一条路是不同的(两栋楼之间的多条道路被视为是不同的道路)。现在教授希望知道,从哪些住宅楼前往主楼的上班路线数最多。

2025-08-03 07:00:00 732

喜缺全书算法册 C++实现

电子书和博文的分工。电子书以:原理、正确性证明、总结为主;博文(题解)以思路、源码、封装类(模板)、测试用例、流程图为主。 当前阶段:以二分查找为主,前缀和为辅,之后会有其它算法的。文字算法见我的博文,视频算法见我的学院课程。 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两者长度都为 n 。每次操作中,你可以选择交换 nums1 中任意两个下标处的值。操作的 开销 为两个下标的和。你的目标是对于所有的 0 <= i <= n - 1 ,都满足 nums1[i] != nums2[i] ,你可以进行 任意次 操作,请你返回达到这个目标的 最小 总代价。请你返回让 nums1 和 nums2 满足上述条件的 最小总代价 ,如果无法达成目标,返回 -1 。 给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。 如果以下条件满足,我们称这些塔是 美丽 的:

2023-09-17

喜缺全书之平凡的经历最新版

《闻缺陷则喜》这本书由何志丹与魏家瑜共同创作,其核心理念是通过暴露和面对问题,促进个人和团队的成长。书名源于作者们对于缺陷的积极态度,他们认为缺陷是学习和进步的契机,而不是阻碍。在当前知识爆炸的时代,分享和交流成为提升效率的关键。 书中涵盖的工作经历部分,作者强调了工作中遇到的挑战和陷阱,这些经历不仅对于技术开发者,如C/C++/VC程序员,具有宝贵的参考价值,也适用于任何行业。作者提到,许多工作中需要但网络上难以找到的信息,正是他们书籍想要填补的知识空白。他们提倡通过阅读、实践和再传授来深化理解和掌握知识,比如,通过反复阅读多本书籍,甚至制作教学视频,以教促学。 生活中的点滴和女儿的成长部分,反映了作者对个人生活和家庭教育的关注。这部分内容可能包含如何平衡工作与家庭,以及如何培养孩子独立思考和解决问题的能力。作者的人生态度和教育观念,可能会给读者提供关于如何在生活中学习和成长的新视角。 投资理财的亏损与教训部分,则揭示了作者在财务管理和投资上的经验和反思。他们可能分享了投资失败的案例,从中提炼出的教训,旨在帮助读者避免同样的错误,提高投资决策的明智程度。这部分内容对于希望提升理

2023-08-18

闻缺陷则喜2021九月版

主要增加:C#调用托管C++,托管C++调用C++

2021-09-11

深度优先搜索(BFS)的原理和C++实现

n个端点的无向图,编号范围[0,n)。每个端点最多4条出边。edges表示{{n1,n2},...{n3,n4}}表示n1和n2,n3和n4之间有边联接。求s到d的最少需要经过多少条边。如果无法到达,请返回-1。可能有环,但无自环,重边,可能不联通。

2023-09-28

美丽塔单调栈O(n)解法

给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。 如果以下条件满足,我们称这些塔是 美丽 的: 1 <= heights[i] <= maxHeights[i] heights 是一个 山状 数组。 如果存在下标 i 满足以下条件,那么我们称数组 heights 是一个 山状 数组: 对于所有 0 < j <= i ,都有 heights[j - 1] <= heights[j] 对于所有 i <= k < n - 1 ,都有 heights[k + 1] <= heights[k] 请你返回满足 美丽塔 要求的方案中,高度和的最大值 。

2023-09-27

较难算法: 美丽塔 时间复杂度O(nlongn)

给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。 如果以下条件满足,我们称这些塔是 美丽 的: 1 <= heights[i] <= maxHeights[i] heights 是一个 山状 数组。 如果存在下标 i 满足以下条件,那么我们称数组 heights 是一个 山状 数组: 对于所有 0 < j <= i ,都有 heights[j - 1] <= heights[j] 对于所有 i <= k < n - 1 ,都有 heights[k + 1] <= heights[k] 请你返回满足 美丽塔 要求的方案中,高度和的最大值 。

2023-09-24

让数组不相等的最小总代价

让数组不相等的最小总代价 可运行源码,VS2022 C++17 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两者长度都为 n 。每次操作中,你可以选择交换 nums1 中任意两个下标处的值。操作的 开销 为两个下标的和。你的目标是对于所有的 0 <= i <= n - 1 ,都满足 nums1[i] != nums2[i] ,你可以进行 任意次 操作,请你返回达到这个目标的 最小 总代价。请你返回让 nums1 和 nums2 满足上述条件的 最小总代价 ,如果无法达成目标,返回 -1 。

2023-09-23

《闻缺陷则喜》之《主册》

闻缺陷则喜 1 第一章:平凡的经历 5 第二章:观念与想法 5 1. 基础 6 1.1. 认知鸿沟 6 2. 传播 6 3. 沟通 6 3.1. 淡化对错 6 3.2. 不要随意批评别人 6 3.3. 参与感 6 3.4. 如果错了,马上认错 7 3.5. 从别人的立场说服对方 7 3.6. 具体到场景 7 4. 交往与合作 7 4.1. 双赢思维 7 4.2. 合作层次 8 4.3. 能力+信息(情报)+资源=成就 8 5. 工作相关 8 5.1. 金融骗局 8 5.2. 对小白而言创业比股票危险的多 9 5.3. 投资比创业稳妥的多 9 5.4. 程序员干不到30岁 9 5.5. 忠诚度与能力 10 5.6. 拒绝无意义加班 10 5.7. 内卷的历史 11 5.8. 关于社保 11 6. 家庭相关 12 6.1. 我的遗产 12 6.2. 金钱观 12 6.3. 借贷观 13 6.4. 女儿的婚姻 13 6.5. 轶事 14 6.6. 生育观 15 6.7. 教育观 15 6.8. 不要因为担心亲友不舒服,而不指出错误 16 7. 工作技巧 16 7.1. 八二原理 16 8.

2022-09-10

《闻缺陷则喜》之《软件开发的那些人》 20230917

软件团队的那些人(理论) 4 1. 引言 5 1.1. 你的灯开着么? 5 1.2. 货车过山洞 5 1.3. 软件维护之痛 5 2. 软件过程与思想 6 2.1. 基础 6 2.2. 过程模型 12 2.3. 敏捷开发 14 2.4. 编程范式 15 2.5. 工具 16 3. 问题定义 18 3.1. 基础 18 3.2. 过滤概念(可行性分析) 20 3.3. 用户细分 22 3.4. 模式 22 4. 系统分析 23 4.1. 基础 24 4.2. 用户画像 25 1.1 RFM模型 25 4.3. 需求收集与整理 25 4.4. 系统分析 26 5. 架构设计 26 5.1. 开发期质量 26 5.2. 运行期质量 28 5.3. 沟通 35 5.4. 架构内容 36 5.5. 架构模式 38 5.6. 关于重构 39 5.7. 其它 42 6. 概要设计 44 6.1. 设计模式六大原则 44 6.2. 设计模式 45 6.3. 反模式 46 6.4. 模块划分、公共数据、资源设计、接口 46 6.5. 界面设计 49 6.6. 数据存储设计 49 6.7. 工时预估与工作

2021-08-09

二分查找旋转数组源码和视频

包括视频和三个版本的源码(初始、寻找右数组左边界、完成) 已知整数数组nums,先按升序排序后,再旋转。旋转k位后,元素分别为nums[k],nums[k+1]...nums[0]...nums[k-1]。请查找target 是否存在,如果存在返回所在索引;否则返回-1。假定nums没有重复的元素。 假定排序后的数组为{1,2,3,4,5}。 旋转0位:不变。 旋转1位:{2,3,4,5,1} 旋转2位:{3,4,5,1,2} 旋转3位:{4,5,1,2,3} 旋转4位:{5,1,2,3,4} 1.解题思路 观察后,可以得到如下结论: 旋转数组,可以拆分成左右两个升序数组,且左数组的任意元素都大于右数组的任意元素。 分两步: 一,找到数组的分界线RBegin,[0,RBegin)是左数组,[RBegin,n)是右数组。特殊情况:只有一个升序数组,则RBegin为0,左数组为空。 如果是小于等于nums.back(),在右边找;否则在左边找。升序寻找元素之前已经讲过了,就不累赘了。

2023-08-20

C# 获取C++的连续数据

C# 获取C++的连续数据。 两种方式:1,返回C++指针,2,将值存到C#的数组中。

2022-04-02

闻缺陷则喜版本号20220123

包括:问题定义、系统分析、架构、概要设计、详细设计、测试等!

2022-01-23

闻缺陷则喜2021年12月26.doc

闻缺陷则喜,本人拙作,注将软件工程。

2021-12-26

闻缺陷则喜20211205

包括:问题定义、系统分析、架构、概要设计、详细设计、测试等!

2021-12-07

Windows性能监控工具Perfmon使用

Windows性能监控工具Perfmon使用

2021-10-31

关于halcon膨胀腐蚀开闭.doc

关于halcon膨胀腐蚀开闭

2021-11-14

简单的C#类 生成对应的C#类

开发工具: C#2013 功能: 针对简单的C#类,生成对应的非托管C++类,并生成托管C++的转换函数。 应用场景: 界面层、数据层C#,逻辑层C++。 简单的C#类:类型只包括 double string List

2021-11-07

保存文件的同时删除文件,保存用时会略微升高

保存文件的同时删除文件,保存用时会略微升高。没必要花大功夫专门处理 保存500文件用时(毫秒):30906 删除文件同时,保存500文件用时(毫秒):30263 删除500文件用时(毫秒):363 保存500文件用时(毫秒):29155 删除文件同时,保存500文件用时(毫秒):29258 删除500文件用时(毫秒):426 保存500文件用时(毫秒):27992 删除文件同时,保存500文件用时(毫秒):29068 删除500文件用时(毫秒):686 保存500文件用时(毫秒):29172 删除文件同时,保存500文件用时(毫秒):31837 删除500文件用时(毫秒):337 保存500文件用时(毫秒):29373 删除文件同时,保存500文件用时(毫秒):29563 删除500文件用时(毫秒):321 保存500文件用时(毫秒):29663 删除文件同时,保存500文件用时(毫秒):30180 删除500文件用时(毫秒):350

2021-10-11

多线程样例一 读写参数文件

事情起因: 修改配置后,C++函数取读配置xml时,相机缓存满了而引起崩溃。几率发生。 解决思路: 读文件费时间,所以开一个线程读文件。 抽象后的类似demo: 假定读文件需要0.6秒,图像处理(用存文件代替)需要0.5秒,各执行100次。 类和函数 读取文件函数: 一,List<int>增加本序号(0开始)。 二,随机生成5000整数,加到list<int>中。 三,写文件(文件名为序号,如0.txt),文件夹File。 四,Sleep(600)。 五,记录日志:本函数开始执行 时间,结束时间,序号。 六,复制List<int>到参数。 模拟图像处理函数: 一,复制参数 二,参数保存到文件,文件名list<int>第一个int,文件夹img。 三,Sleep(500)。 六,记录日志:本函数开始执行 时间,结束时间,序号。 参数类(跨线程): 一,从list<int>复制参数。 二,复制数据到list<int>。 线程: 启动线程“读取参数”线程:执行100次 读取参数功能。 启动线程“模拟图像处理”线程:执行100次 模拟图像处理。 运行预期结果: File文件夹中有0到100共101个文件。 img有约80个文件。 img有的文件,File文件夹中一定有,且完全相同。用文件夹比较工具(如:BCompare)查看。 查看日志:“读取参数”线程约60秒完成,模拟图像处理”线程约50秒完成。

2021-09-09

C#调用C++的类和函数

C#直接调用C++的函数,C#调用托管C++,C++托管调用非托管C++

2021-08-31

本博文算法对应源码单元测试用例

电子书、博文和附录分工。电子书以总结、原理、正确性证明为主;博文(题解)以思路、源码、封装类(模板)、测试用例、流程图为主。附录:封装好的类、小题题解、很长的源码和单元测试。 本书针对读者:刚刚入职的软件工程师,假定已经学完了“C++”和“算法与数据结构基础”。工程师和学生不同,工程师的首要目标的实用。工程师用到的知识是未知的,很多都是临时用一下,之后几年甚至一辈子都不会用到。受精力的限制,不可能将所有遇到的知识全部学完。本文会有超多用例,方便工程师从最相近的样例开始修改。所以,本文先讲如何使用,再讲原理,最后讲样例;设计(如:流程图)和源码会作为附录提供。

2024-07-05

位运算、状态压缩、枚举子集汇总.html

位运算、状态压缩、枚举子集汇总.html

2024-04-27

本博客配套流程图,会经常更新

Bob 站在单元格 (0, 0) ,想要前往目的地 destination :(row, column) 。他只能向 右 或向 下 走。你可以为 Bob 提供导航 指令 来帮助他到达目的地 destination 。 指令 用字符串表示,其中每个字符: 'H' ,意味着水平向右移动 'V' ,意味着竖直向下移动 能够为 Bob 导航到目的地 destination 的指令可以有多种,例如,如果目的地 destination 是 (2, 3),"HHHVV" 和 "HVHVH" 都是有效 指令 。 然而,Bob 很挑剔。因为他的幸运数字是 k,他想要遵循 按字典序排列后的第 k 条最小指令 的导航前往目的地 destination 。k 的编号 从 1 开始 。 给你一个整数数组 destination 和一个整数 k ,请你返回可以为 Bob 提供前往目的地 destination 导航的 按字典序排列后的第 k 条最小指令 。

2024-04-24

利用二分查找解决H指数问题

利用二分查找解决H指数问题。

2024-01-01

搜索矩阵C++实现:二分查找Z形查找

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。

2023-12-17

长度最短的子数组C++实现

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。 示例 2: 输入:target = 4, nums = [1,4,4] 输出:1 示例 3: 输入:target = 11, nums = [1,1,1,1,1,1,1,1] 输出:0 提示: 1 <= target <= 109 1 <= nums.length <= 105 1 <= nums[i] <= 105

2023-12-10

[二分查找双指针]LeetCode881: 救生艇

给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 返回 承载所有人所需的最小船数 。

2023-12-03

两数之和 - 输入有序数组

给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。 以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。 你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

2023-11-26

C++二分查找算法:132 模式

给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。 如果 nums 中存在 132 模式的子序列 ,返回 true ;否则,返回 false 。

2023-11-12

C++算法:第 N 位数字原理、源码、测试用例

给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。 示例 1: 输入:n = 3 输出:3 示例 2: 输入:n = 11 输出:0 解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。 提示: 1 <= n <= 231 – 1

2023-11-05

C++二分查找算法应用:最长递增子序列 原理、源码、测试用例

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1: 输入:nums = [10,9,2,5,3,7,101,18] 输出:4 解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。 示例 2: 输入:nums = [0,1,0,3,2,3] 输出:4 示例 3: 输入:nums = [7,7,7,7,7,7,7] 输出:1 参数范围: 1 <= nums.length <= 2500 -104 <= nums[i] <=104

2023-10-29

二分应用:峰值查找 原理、源码、测试用例

1. 题目 长度为n的数组nums,请返回任意一峰值的索引。符合以下条件之一i便是峰值的索引。 n等于1 i等于0 n>1 i等于0 nums[i] >nums[i+1] n>1 i等于n-1 nums[i] > nums[i-1] 0<i<n-1 nums[i]>nums[i-1] nums[i]>nums[i+1] 题目保证nums[i]不等于nums[i+1]。 2. 分析 假定: nums[left,r)符合nums[left]>nums[left-1],且nums[r-1]>nums[r]。显然初始情况nums[0,n)符合。 推论一:如果[left,r)的长度为1,则left就是返回的索引。 推论二:假定left < mid<r。如果mid[mid] > mid[mid-1],则nums[mid,r)也符合假定。如果mid[mid] < mid[mid-1],则nums[left,mid)也符合假定。 推论三:推论二也可以也可以理解成分别抛弃[left,mid)和[mid,r)。令mid = left+(r-left)/2,由于r-left>=2,所以left<mid<

2023-10-22

C++算法:前缀和基础

长度为n的数组nums,共有n+1个以nums[0]开始的子数组。索引范围分别为[0,i),i取值区间[0,n]。preSum[i]记录子数组[0,i)的和。比如:nums = {1,2,3,4},则preSum = {0,1,3,6,10}。通过preSum,我们可以求任意nums的子数组和。子数组[i,j)等于子数组[0,j)减去[0,i),也就是子数组[i,j)的和等于preSum[j] – preSum[i]。如果i等于j,则preSum[i]-preSum[i],和为0,符合计算公式。如果i大于j,则非法,需要提前排除。

2023-10-15

时间复杂度O(40n*n)的C++算法:修改图中的边权

给你一个 n 个节点的 无向带权连通 图,节点编号为 0 到 n - 1 ,再给你一个整数数组 edges ,其中 edges[i] = [ai, bi, wi] 表示节点 ai 和 bi 之间有一条边权为 wi 的边。 部分边的边权为 -1(wi = -1),其他边的边权都为 正 数(wi > 0)。 你需要将所有边权为 -1 的边都修改为范围 [1, 2 * 10^9] 中的 正整数 ,使得从节点 source 到节点 destination 的 最短距离 为整数 target 。如果有 多种 修改方案可以使 source 和 destination 之间的最短距离等于 target ,你可以返回任意一种方案。 如果存在使 source 到 destination 最短距离为 target 的方案,请你按任意顺序返回包含所有边的数组(包括未修改边权的边)。如果不存在这样的方案,请你返回一个 空数组 。 注意:你不能修改一开始边权为正数的边。

2023-10-14

多源最短路径的原理及C++实现

当一层循环执行完后,m_vMat[i1][i2]表示经过[0,i)中的任意个点的最短距离。 初始状态下, m_vMat[i1][i2]表示直达的最小距离,也就是经过0个点。 通过[0,i)中任意个点,i1到i2的最短路径记为PrePathi1i2,通过[0,i+1)中任意个点,i1到i2的距离的路径为Pathi1i2,如果Path不经过Pathi1i2,则和PrePathi1i2相同。如果经过则可以拆分成{i1…i}+{i…i2},显然{i1…i}是PrePathi1i,{i…i2}是PrePathii2,否则替换成PrePathi1i和PrePathii2。 m_vMat同时表示PreMath和Math,如果m_vMat[i1][i]或m_vMat[i][i2]已经更新,会带来错误的结果么?结果是不会,会更新但值不变。 当i1等于i时: m_vMat[i][i2] = min(…, m_vMat[i][i] + m_vMat[i][i2]); 由于m_vMat[i][i]为0,所以右式就是左式。 当i2等于i时,类似。

2023-10-04

堆优化迪氏最短单源路径原理及C++实现

4.1. 时间复杂度 O(ElogE),E是边数。适用与稀疏图。 4.2. 使用前提 边的权为正。可以非连通,非连通的距离为-1。 4.3. 原理 优选队列(小根堆)记录两个数据:当前点到源点距离,当前点。先处理距离小的点;如果距离相等,先处理谁都可以。可以用pair记录,不用重写小于。优先队列只记录如下情况的距离: 一,{0,源点}。 二,任意点的最短距离和可以直达的边。 如果是有向图,则入队数量等于边数,计算出起点最短路径的那一轮。无向图,则翻倍。显然出队数量等于入队数量。优先队列入队和出队时间复杂度都是O(logn),故总时间复杂度为O(nlogn)。

2023-10-03

.有向图计数优化版原理及C++实现

不需要拓扑排序,也不需要并集查找,直接dfs了。完成以下三个职责: 一,DFS那些端点在环上。 二,DFS环上各点此环的长度。 三,DFS非环上各点。

2023-10-02

有向图访问计数的原理及C++实现

现有一个有向图,其中包含 n 个节点,节点编号从 0 到 n - 1 。此外,该图还包含了 n 条有向边。 给你一个下标从 0 开始的数组 edges ,其中 edges[i] 表示存在一条从节点 i 到节点 edges[i] 的边。 想象在图上发生以下过程: 你从节点 x 开始,通过边访问其他节点,直到你在 此过程 中再次访问到之前已经访问过的节点。 返回数组 answer 作为答案,其中 answer[i] 表示如果从节点 i 开始执行该过程,你可以访问到的不同节点数。 2 <= n <= 100000 无自环。

2023-10-01

朴素迪氏最短单源路径的原理及C++源码及测试用例

Dijkstra算法,翻译为迪杰斯特拉或狄克斯特拉。在下驽钝,记不住如此长的翻译,故简称迪氏。 3.1.时间复杂度 O(n2),端点数的平方。 3.2.使用前提 边的权为正。可以非连通,非连通的距离为-1。

2023-09-30

01BFS最短距离原理和C++实现

n个端点的无向图,编号范围[0,n)。Edges0表示{{n1,n2},...{n3,n4}}表示n1和n2,n3和n4之间有路联接。Edges1表示{{n1,n2},...{n3,n4}}表示n1和n2,n3和n4之间有损坏的路连接。要想让s和d之间至少有一条通道,最小需要维修多少条路。如果无法到达,请返回-1。可能有环,但无自环,重边,可能不联通。

2023-09-29

空空如也

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

TA关注的人

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