自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

闻缺陷则喜何志丹

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

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

原创 【动态规划】B4336 [中山市赛 2023] 永别|普及+

你做了一个梦,梦里有一个字符串,这个字符串无论正着读还是倒着读都是一样的,例如:$\tt abcba$ 就符合这个条件。但是你醒来时不记得梦中的字符串是什么,只记得它是另一个字符串 $S$ 的子序列,你想知道梦中字符串最长是多少。提示:字符串 $A$ 是字符串 $B$ 的子序列当且仅当从 $B$ 中删除若干个字符(可以不删)后可以变成 $A$。例如:$\tt acd$ 是 $\tt achda$ 的子序列,因为从 $\tt achda$ 中删去第 $3$ 个和第 $5$ 个字符后就是 $\tt ac

2025-06-09 08:28:23 1093 45

原创 【分治法 容斥原理 矩阵快速幂】P6692 出生点|普及+

这款游戏的地图可以抽象成一张有 $n$ 行 $m$ 列的网格图,网格图上有 $k$ 个障碍点,相邻两点间边长为 $1$。游戏开始时~~小 L~~、小 W 和小 H 会**各自**随机出生在一个点。当然,他们**不会出生在障碍点**。~~经常开局死的~~小 L 看着小 W 和小 H 每次在地图上汇合时经过的路径,很想知道他们每次出生后两个人之间的期望距离。(这里的距离指两点间[曼哈顿距离](https://www.luogu.com.cn/blog/xuxing/Distance-Algorithm),即

2025-06-06 07:00:00 1617 54

原创 【图论 拓扑排序 贪心 临项交换】P5603 小 C 与桌游 题解|普及+

这个桌游的地图可以被抽象成一个 $n$ 个点,$m$ 条边的**有向无环图**(**不保证连通**),小 C 在这个地图上行走,小 C 能走到某个点当且仅当能够到达这个点的所有点都已经被小 C 走到。小 C 会走到每个点恰好 $1$ 次,并且他能走到哪些点与他当前所在的点没有关系(即可以走到与当前所在的点没有连边的点,只要满足之前的条件)。小 C 每走到一个标号比之前走到的点都大的点,他就会有 $\frac{1}{2}$ 的概率从对手那里拿到 $1$ 块筹码,有 $\frac{1}{2}$ 的概率给对手

2025-06-02 07:00:00 1882 70

原创 【博客之星2024】何志丹盘点2024及徬徨2025

2024年发布博文728篇,基本上每天都2篇;目前有6篇博文处于待发布状态;这些天比较忙,所以草稿箱的博文急剧减少,只有182篇。几乎全部是原创,全部是自己刷题(力扣、洛谷)的题解。起初,只能先做题,做完题后,总结;现在水平略有提高,先写题解,再编码,提交通过后,再更新题解。

2025-01-23 07:00:00 5085 163

原创 【中位数贪心】 P11854 [CSP-J2022 山东] 宴会|普及+

今人不见古时月,今月曾经照古人。梦回长安,大唐风华,十里长安花,一日看尽。唐长安城是当时世界上规模最大、建筑最宏伟、规划布局最为规范化的一座都城。其营建制度规划布局的特点是规模空前、创设皇城、三城层环、六坡利用、布局对称、街衢宽阔、坊里齐整、形制划一、渠水纵横、绿荫蔽城、郊环祀坛。而所谓的十里长安街,位于长安城的中轴线上,即唐长安城的朱雀大街,又称承天门大街。唐朝官员们住在各个“坊”里,上朝下朝都需要通过朱雀大街。为了保持各大家族的联系和友谊,各官员往往会每月办一次宴会。为了方便描述,我们把朱雀大

2025-06-10 07:00:00 497

原创 【图论 博弈论】P9725 [EC Final 2022] Chase Game 2|普及+

庞教授和寿教授喜欢玩追逐游戏。游戏地图由 $n$ 个房间和 $n-1$ 条双向通道组成。游戏地图是连通的。这意味着地图形成一棵树。一开始,庞教授在房间 $u$,而寿教授在房间 $v$($u\neq v$)。庞教授和寿教授轮流玩游戏,寿教授先开始。在自己的回合中,玩家知道自己所在的位置和另一个玩家的位置,可以决定留在当前房间或者移动到与当前房间直接通过通道相连的另一个房间。当庞教授和寿教授在同一个房间时,寿教授被庞教授抓住。庞教授和寿教授足够聪明。庞教授希望在有限的回合内抓住寿教授。寿教授不希望在

2025-06-10 07:00:00 368 1

原创 【动态规划 数论】P9759 [COCI 2022/2023 #3] Bomboni|普及+

Iva 是一个狂热的糖果迷!在她面前是一块填满糖果和障碍的 $n\times n$ 的土地。Iva 目前在左上角。通过向右或向下移动,她要前往右下角。Iva 目前所在的格子没有障碍。在每个格子中写了一个数字表示此地为糖果或障碍。Iva 会吃掉所有经过的糖果(包括起点和终点的糖果)并且将糖果对应的数字相乘。Iva 知道她自己最喜欢的数字是 $k$,所以她希望这个乘积结果能被 $k$ 整除。她想知道一共有多少条这样的路径。由于答案可能很大,她只想知道答案模 $998244353$ 的结果。

2025-06-09 08:26:52 805

原创 【强连通分量 缩点】P2341 [USACO03FALL / HAOI2006] 受欢迎的牛 G|普及+

题目背景本题测试数据已修复。## 题目描述每头奶牛都梦想成为牛棚里的明星。被所有奶牛喜欢的奶牛就是一头明星奶牛。所有奶牛都是自恋狂,每头奶牛总是喜欢自己的。奶牛之间的“喜欢”是可以传递的——如果 $A$ 喜欢 $B$,$B$ 喜欢 $C$,那么 $A$ 也喜欢 $C$。牛栏里共有 $N$ 头奶牛,给定一些奶牛之间的爱慕关系,请你算出有多少头奶牛可以当明星。## 输入格式第一行:两个用空格分开的整数:$N$ 和 $M$。接下来 $M$ 行:每行两个用空格分开的整数:$A$ 和 $B$,

2025-06-08 17:00:00 778 1

原创 【强连通分量 缩点 拓扑排序】P3387 【模板】缩点|普及+

给定一个 �n 个点 �m 条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大。你只需要求出这个权值和。允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次。输入格式第一行两个正整数 �,�n,m。第二行 �n 个整数,其中第 �i 个数 ��a i​ 表示点 �i 的点权。第三至 �+2m+2 行,每行两个整数 �,�u,v,表示一条 �→�u→v 的有向边。输出格式共一行,最大的点权之

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

原创 【强连通分量 缩点 最长路 拓扑排序】P2656 采蘑菇|普及+

小胖和 ZYR 要去 ESQMS 森林采蘑菇。ESQMS 森林间有 $N$ 个小树丛,$M$ 条小径,每条小径都是单向的,连接两个小树丛,上面都有一定数量的蘑菇。小胖和 ZYR 经过某条小径一次,可以采走这条路上所有的蘑菇。由于 ESQMS 森林是一片神奇的沃土,所以一条路上的蘑菇被采过后,又会长出一些新的蘑菇,数量为原来蘑菇的数量乘上这条路的“恢复系数”,再下取整。比如,一条路上有 $4$ 个蘑菇,这条路的“恢复系数”为 $0.7$,则第一~四次经过这条路径所能采到的蘑菇数量分别为 $4,2,1,

2025-06-07 17:00:00 584 1

原创 【强连通分量 拓扑序 分层图】 P4645 [COCI 2006/2007 #3] BICIKLI|普及+

题目背景一场自行车比赛将要在一个遥远的地方上举行。## 题目描述这个地方有 $n$ 个城镇,从 $1\sim n$ 编号,其中有 $m$ 条**单向**道路连接它们。比赛将在 $1$ 号城镇开始并在 $2$ 号城镇结束。主办方想知道,一共有多少条不同的路线?## 输入格式输入第一行为两个整数 $n,m$,意义如题目描述所示。接下来的 $m$ 行,每行两个整数 $a,b$,描述一条从 $a$ 到 $b$ 的道路。两个城镇间可以有多条道路。

2025-06-07 07:00:00 606

原创 【图论 强连通分量】P1653 [USACO04DEC] Cow Ski Area G|普及+

约翰的表哥罗恩生活在科罗拉多州。他近来打算教他的奶牛们滑雪,但是奶牛们非常害羞,不敢在游人组织的度假胜地滑雪。没办法,他只好自己建滑雪场了。罗恩的雪场可以划分为 $W$ 列 $L$ 行 $(1\le W\le 500, 1\le L\le 500)$,每个方格有一个特定的高度 $H(0\le H\le 9999)$。奶牛可以在相邻方格间滑雪,而且不能由低到高滑。为了保证任意方格可以互通,罗恩打算造一些直达缆车。缆车很强大,可以连接任意两个方格,而且是双向的。而且同一个方格也可以造多台缆车。但是缆车的建造

2025-06-06 15:30:00 890 3

原创 【二分图 染色法 BFS】B4188 [中山市赛 2024] 参数拟合|普及+

B4188 [中山市赛 2024] 参数拟合## 题目描述在《机械设计与制作》课程中,Jimmy 制作了一款机械臂作为期末作业。在测试与改进阶段,immy 通过实验测得了他设计的机械臂的尺寸、硬度、灵活度、最大抓力等 $n$ 个参数 $A_1, A_2\dots A_n$。根据理论计算,机械臂的最佳性能参数为 $B_1, B_2\dots B_n$。为了提高机械臂的性能,拿到更高的分数,Jimmy 决定调整机械参数。由于机械臂各个部件间具有关联性,修改某个参数的同时也会影响到另一个参数。具体来说,

2025-06-05 17:00:00 2441 3

原创 【二分图】P3386 【模板】二分图最大匹配|普及+

模板】二分图最大匹配## 题目描述给定一个二分图,其左部点的个数为 $n$,右部点的个数为 $m$,边数为 $e$,求其最大匹配的边数。左部点从 $1$ 至 $n$ 编号,右部点从 $1$ 至 $m$ 编号。## 输入格式输入的第一行是三个整数,分别代表 $n$,$m$ 和 $e$。接下来 $e$ 行,每行两个整数 $u, v$,表示存在一条连接左部点 $u$ 和右部点 $v$ 的边。## 输出格式输出一行一个整数,代表二分图最大匹配的边数。

2025-06-05 07:00:00 656

原创 【二分图 图论】P9384 [THUPC 2023 决赛] 着色|普及+

给出一个 $n$ 个节点的无向完全图,你需要给每条边标上一个 $0 \sim 9$ 的数字,使得图上不存在一个三元环或五元环满足:其上所有边的数字相同。

2025-06-04 17:00:00 683 1

原创 【图论 分层图 BFS】P5663 [CSP-J2019] 加工零件|普及+

凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很神奇。工厂里有 $n$ 位工人,工人们从 $1 \sim n$ 编号。某些工人之间存在双向的零件传送带。保证每两名工人之间最多只存在一条传送带。如果 $x$ 号工人想生产一个被加工到第 $L\,(L \gt 1)$ 阶段的零件,则**所有**与 $x$ 号工人有传送带**直接**相连的工人,都需要生产一个被加工到第 $L - 1$ 阶段的零件(但 $x$ 号工人自己**无需**生产第 $L - 1$ 阶段的零件)。如果 $x$

2025-06-04 07:00:00 870

原创 【分层图 最短路 迪氏堆优化最短路】B4165 [BCSP-X 2024 12 月初中组] 贸易|普及+

这个世界上一共有 $n$ 个国家,这些国家之间经常有贸易往来,于是为了方便,有 $m$ 条道路连接这些国家,每条道路连接两个国家,使得这两个国家之间可以轻松进行往来。有了这些道路之后,商人在国家之间会赚取到更多的利润,所以为了限制商人的财富,国家之间制定了一个规则。商人经过每条道路,需要上交这条路对应的过路费 $w_i$,商人从起点国家到达目的地国家时,会返还给他走的路径上的过路费最大的那条路的费用 $\max w_i$ 减去过路费最小的那条路的费用 $\min w_i$。现在,有 $k$ 个商人要

2025-06-03 17:00:00 1361 2

原创 【分层图最短路】P8724 [蓝桥杯 2020 省 AB3] 限高杆|普及+

限高杆## 题目描述某市有 $n$ 个路口,有 $m$ 段道路连接这些路口,组成了该市的公路系统。其中一段道路两端一定连接两个不同的路口。道路中间不会穿过路口。由于各种原因,在一部分道路的中间设置了一些限高杆,有限高杆的路段货车无法通过。在该市有两个重要的市场 $A$ 和 $B$,分别在路口 $1$ 和 $n$ 附近,货车从市场 $A$ 出发,首先走到路口 $1$,然后经过公路系统走到路口 $n$,才能到达市场 $B$。两个市场非常繁华,每天有很多货车往返于两个市场之间。市长发现,由于限

2025-06-03 07:00:00 767

原创 【数学 逆序对 构造】P12386 [蓝桥杯 2023 省 Python B] 混乱的数组|普及+

## 题目描述给定一个正整数 $x$,请找出一个尽可能短的仅含正整数的数组 $A$ 使得 $A$ 中恰好有 $x$ 对 $i, j$ 满足 $i < j$ 且 $A_i > A_j$。如果存在多个这样的数组,请输出字典序最小的那个。## 输入格式输入一行包含一个整数表示 $x$。## 输出格式输出两行。第一行包含一个整数 $n$,表示所求出的数组长度。第二行包含 $n$ 个整数 $A_i$,相邻整数之间使用一个空格分隔,依次表示数组中的每个数。

2025-06-02 17:00:00 830 2

原创 【拓扑排序】P6560 [SBCOI2020] 时光的流逝|普及+

这个游戏是在一个有向图(不保证无环)上进行的。每轮游戏开始前,她们先在图上选定一个起点和一个终点,并在起点处放上一枚棋子。然后两人轮流移动棋子,每次可以将棋子按照有向图的方向移动至相邻的点。如果谁先将棋子移动至终点,那么谁就胜利了。同样,如果谁无法移动了,那么谁就失败了。两人轮流操作,请问,他们是否有必胜策略呢? 答案为一个整数 `0` 或 `1` 或 `-1`,其中 `1` 表示(先手)有必胜策略,`-1` 表示后手有必胜策略,`0` 表示两人均无必胜策略。

2025-06-01 17:00:00 891 1

原创 【拓扑排序 高精度】P7113 [NOIP2020] 排水系统

对于一个城市来说,排水系统是极其重要的一个部分。有一天,小 C 拿到了某座城市排水系统的设计图。排水系统由 $n$ 个排水结点(它们从 $1 \sim n$ 编号)和若干个单向排水管道构成。每一个排水结点有若干个管道用于汇集其他排水结点的污水(简称为该结点的汇集管道),也有若干个管道向其他的排水结点排出污水(简称为该结点的排出管道)。排水系统的结点中有 $m$ 个污水接收口,它们的编号分别为 $1, 2, \ldots , m$,污水只能从这些接收口流入排水系统,并且这些结点没有汇集管道。排水系统

2025-06-01 08:30:15 524

原创 【拓扑排序 离散化】P9981 [USACO23DEC] Minimum Longest Trip G|普及+

Minimum Longest Trip G## 题目描述Bessie 正在奶牛大陆上旅行。奶牛大陆由从 $1$ 到 $N$ 编号的 $N$($2 \le N \le 2\cdot 10^5$)座城市和 $M$($1 \le M \le 4\cdot 10^5$)条单向道路组成。第 $i$ 条路从城市 $a_i$ 通向城市 $b_i$,标签为 $l_i$。由城市 $x_0$ 开始的长度为 $k$ 的旅程被定义为一个城市序列 $x_0,x_1,\ldots,x_k$,对于所有的 $0 \le i

2025-05-31 17:00:00 890 1

原创 【拓扑排序】P7150 [USACO20DEC] Stuck in a Rut S|普及+

Stuck in a Rut S## 题目描述Farmer John 最近扩大了他的农场,从奶牛们的角度看来这个农场相当于是无限大了!奶牛们将农场上放牧的区域想作是一个由正方形方格组成的无限大二维方阵,每个方格中均有美味的草(将每个方格看作是棋盘上的一个方格)。Farmer John 的 $N$ 头奶牛($1≤N≤1000$)初始时位于不同的方格中,一部分朝向北面,一部分朝向东面。每一小时,每头奶牛会执行以下二者之一: - 如果她当前所在的方格里的草已经被其他奶牛吃掉了,则她会停下(并从这个

2025-05-31 07:00:00 863

原创 【有向图 拓扑排序 】P8405 [COCI 2021/2022 #6] Naboj|普及+

Naboj## 题目描述Šikić 先生是一位化学老师,他正在用 $n$ 个金属球和 $m$ 根铜导线做实验。他将一些对金属球用导线相连,使这些球(直接或间接地)与其他球都相连。他想要教学生关于电荷的知识,因此他将通过按顺序给金属球充电来演示它。Šikić 先生可以让每个球带上正负电荷的一种。当一个金属球带负电荷时,与这个金属球相连的所有导线中的电子都将被排斥到与该导线相连的另一个金属球上。反过来,当一个金属球带正电荷时,与这个金属球相连的所有导线中的电子都将受这个金属球的吸引。无论导线的先前状态

2025-05-30 15:30:00 964

原创 【有向树 拓扑排序】P9386 [THUPC 2023 决赛] 大纲|普及+

大纲## 题目描述小 I、小 O 和小 N 是 ION 大纲的编写者,小 I 负责给每个知识点定难度。ION 大纲计划列入 $n$ 个知识点,其中小 I 按照自己的认识给其中部分知识点定好了难度,还有部分知识点没有定难度。知识点之间有依赖关系,这个依赖关系恰好构成了一棵以 $1$ 为根的外向树,知识点 $x$ 指向知识点 $y$ 表示 $x$ 依赖 $y$。**依赖关系不具有传递性。**你需要告诉小 I 目前确定下来的难度是否合理。我们认为确定下来的难度是合理的当且仅当存在一个给所有未确定

2025-05-30 07:00:00 1680

原创 C++并集查找

本文介绍了并查集(Union-Find)数据结构的基本概念和实现方法。主要内容包括:1) 并查集的基本操作find和union,用于处理动态连通性;2) 暴力实现方法及其时间复杂度分析;3) 两种优化策略:启发式合并(UNION BY RANK)和路径压缩(PATH COMPRESSION);4) 可撤销并查集的实现思路;5) 提供了三种封装类代码实现:普通并查集、实时更新节点的并查集、无向图并查集。文章通过数学归纳法证明了合并操作的正确性,分析了不同实现的时间复杂度,并给出了详细的C++代码实现,适合算法

2025-05-29 07:15:00 3501 61

原创 【并集查找 启发性合并】P8710 [蓝桥杯 2020 省 AB1] 网络分析|普及+

小明正在做一个网络实验。他设置了 $n$ 台电脑,称为节点,用于收发和存储数据。初始时,所有节点都是独立的,不存在任何连接。小明可以通过网线将两个节点连接起来,连接后两个节点就可以互相通信了。两个节点如果存在网线连接,称为相邻。小明有时会测试当时的网络,他会在某个节点发送一条信息,信息会发送到每个相邻的节点,之后这些节点又会转发到自己相邻的节点,直到所有直接或间接相邻的节点都收到了信息。所有发送和接收的节点都会将信息存储下来。一条信息只存储一次。给出小明连接和测试的过程,请计算出每个节点

2025-05-29 07:00:00 1601 1

原创 【并集查找 有向图 逆序思考】P8359 [SNOI2022] 垃圾回收|普及+

通常的情况下,编程语言在管理内存时进行如下的选择:- 让用户进行手动内存管理(C、C++、Rust 等),这会收获很好的性能,但是给用户提供了很大的编程负担。- 使用垃圾回收系统(Java、Go 等),这需要维护一个运行时系统,并且在内存使用和程序性能方面造成了许多不可预测的负担。尽管存在许多的问题,目前最通用的自动化内存管理手段始终为 Tracing Garbage Collector。这种做法的最基础的思路是维护对象间的引用关系,形成一张图,每次回收时通过扫描引用关系推导出已经无法被访问到的对

2025-05-29 07:00:00 992

原创 【并集查找】8210 [THUPC 2022 初赛] 造计算机|普及+

小R和小C听说贵系有一门造计算机的课之后吓得连夜提交了退学申请。开玩笑的啦!正处于大一的他们对这门课不但不害怕,甚至有些想笑。他们超强的动手能力甚至驱使他们想造一个玩意玩玩。当然由于他们毕竟才大一,计算机专业课基本上都没上过,经过长时间的艰苦奋战,他们终于造出了一个奇怪的玩意:这台计算机只有 $n$ 个内存单元,反而有足够多个寄存器。内存单元的编号从 $1$ 到 $n$ ,寄存器从 $n+1$ 开始往上编号。每个内存单元和寄存器可以存储一个整数。目前他们已经设计好了一类指令:`swap i,

2025-05-29 07:00:00 1399

原创 【并集查找 拓扑序】P9013 [USACO23JAN] Find and Replace S|普及+

Bessie 正在使用世界上最先进最伟大的文本编辑器:miV!她想将一个仅由大写和小写英文字母组成的字符串转换为一个新的字符串。每一次操作,miV 可以将字符串中所有的字母 $c_1$ 替换成另一种字母 $c_2$。例:对于字符串`aAbBa`, 如果将其中的 `a` 替换成 `B`, 那么字符串会变为`BAbBB`。Bessie 非常地忙碌, 所以对于给出的 $T(1 \le T \le 10)$ 组测试数据, 请输出她至少需要多少次操作才能把原字符串转换为新字符串。

2025-05-29 07:00:00 1604

原创 【最短路 并集查找】P9327 [CCC 2023 S4] Minimum Cost Roads|普及+

作为新当选的基奇纳市市长,Alanna 的首要任务是改善城市的道路规划。基奇纳当前的道路规划可以表示为 $N$ 个交叉路口和 $M$ 条道路的集合,其中第 $i$ 条道路的长度为 $l_i$ 米,每年维护费用为 $c_i$ 美元,并连接交叉路口 $u_i$ 和 $v_i$。为了制定计划,Alanna 必须选择保留和维护的 $M$ 条道路的一个子集,该计划的费用是该子集中所有道路的维护费用之和。为了降低城市的年度支出,Alanna 希望将计划的费用最小化。然而,城市还要求她最小化交叉路口之间的旅行距离

2025-05-29 07:00:00 1744

原创 【二分图 扩展域并集查找】P1525 [NOIP 2010 提高组] 关押罪犯|普及+

S 城现有两座监狱,一共关押着 $N$ 名罪犯,编号分别为 $1\sim N$。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为 $c$ 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为 $c$ 的冲突事件。每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报到 S 城 Z 市长那里。公务繁忙的 Z

2025-05-29 07:00:00 576

原创 【二分图 扩展域并集查找】P11409 西湖有雅座|普及+

孙亦谐准备建西湖雅座来开饭馆。他有 $n$ 个零件,零件的大小均为 $h\times w$。零件从 $1 \sim n$ 编号。对于一个大小为 $h \times w$ 的零件,其可视为一个 $h$ 行 $w$ 列的矩阵 $w$。若用 $a_{i,j}$ 来表示这个矩阵中第 $i$ 行第 $j$ 列的元素。对于 $\forall a_{i,j}$,都有 $a_{i,j}\in \left \{ 0,1\right } $。则编号为 $i$ 的零件的面积为: $S\left(i\right) =

2025-05-29 07:00:00 651

原创 【单调栈 双连通 并集查找】P12169 [蓝桥杯 2025 省 C/Python A/Java C] 登山|普及+

小蓝正在登山,山峰的高度构成 $n$ 行 $m$ 列的正整数矩阵,$a_{i,j}$ 表示第 $i$ 行第 $j$ 列格子 $(i,j)$ 上的山峰的高度。小蓝以一种特别的方式进行登山,如果他此刻在第 $p$ 行第 $q$ 列的格子 $(p,q)$ 上,那么下一步可以选择:1. 走到格子 $(i,q)$,满足 $a_{i,q} < a_{p,q}$ 且 $i > p$;2. 走到格子 $(i,q)$,满足 $a_{i,q} > a_{p,q}$ 且 $i < p$;3. 走到格子 $(p,j)$,满

2025-05-29 07:00:00 1521

原创 【可撤销并集查找】P12274 [蓝桥杯 2024 国 Python B] 设计|普及+

小蓝是 H 市的市长,她正在用设计软件规划 H 市的道路建设。小蓝可以选定两个地区,用一条双向道路将这两个地区连接。由于预算等因素的动态变化,小蓝经常需要拆除一些已经建设好的道路,同时,她希望知道对于当前的两个地区,是否存在一条由多条道路组成的路径能够连接这两个地区。

2025-05-29 07:00:00 624 4

原创 【并集查找 逆向思考】P8097 [USACO22JAN] Farm Updates G|普及+

Farmer John 经营着总共 $N$ 个农场($1\le N\le 10^5$),编号为 $1\ldots N$。最初,这些农场之间没有道路连接,并且每个农场都在活跃地生产牛奶。由于经济的动态性,Farmer John 需要根据 $Q$ 次更新操作($0\le Q\le 2\cdot 10^5$)对他的农场进行改造。更新操作有三种可能的形式:- `(D x)` 停用一个活跃的农场 $x$,使其不再生产牛奶。- `(A x y)` 在两个活跃的农场 $x$ 和 $y$ 之间添加一条道路。

2025-05-28 17:00:00 1243

原创 【并集查找 最小生成树】P8191 [USACO22FEB] Moo Network G|普及+

农夫约翰有 $N$ 头牛($1\le N\le10^5$) 它们在农场里分布的极其的远,因此希望你建立一个通讯网络,便于它们更容易地交换电子短信(当然,这些短信都包含 `moo` 的变形体,即数字)第 $i$ 头牛位于位置 $(x_i,y_i)$ 其中 $0\le x\le 10^6$, $0\le y\le 10$. 在牛 $i$ 与牛 $j$ 之间建立通信链路的成本是它们之间的欧几里德距离的平方,即 $(x_i-x_j)^2+(y_i-y_j)^2$请聪明的你构建一个所有奶牛都能交流的最低成本

2025-05-28 15:00:00 589

原创 【位运算 并集查找】P7973 [KSN2021] Binary Land| 普及+

给定一张 $N$ 个点的图,每个点有权值 $A_i$ 和价值 $B_i$。两个点 $x,y$ 之间存在一条无向边当且仅当 $A_x\text{ xor }A_y>\max(A_x,A_y)$。你需要对于 $i=1,2,\cdots n$ 依次求出点 $i$ 所在连通块中所有点的价值和。

2025-05-28 11:45:00 1016

原创 【并集查找】P7299 [USACO21JAN] Dance Mooves S|普及+

摘要 本文讨论了USACO竞赛题目P7299 [USACO21JAN] Dance Mooves S的解法。题目描述N头奶牛的无限循环交换位置过程,要求计算每头奶牛能到达的不同位置数量。核心解法是:通过分析交换过程形成有向图的环结构,利用并查集确定连通区域,收集各奶牛在一轮交换中经过的位置,最终统计每个连通区域内所有位置的数量。该方法高效处理大规模数据(N≤10^5,K≤2×10^5),避免了直接模拟无限循环过程。

2025-05-28 07:00:00 673

原创 【贪心 逆向思考 并集查找 数学归纳法】P7162 [COCI 2020/2021 #2] Sjekira|普及+

有一棵 $n$ 个结点的树,每个结点有一个权值,删除一条边的费用为该边连接子树中结点权值最大值之和。问以任意顺序删除树中所有边的最小花费。

2025-05-27 17:00:00 1747

喜缺全书算法册 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关注的人

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