自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 【无标题】

给定一个有 n 个顶点的有向图,每个顶点有且仅有一条出边。如果不存在这样的 xi​ 和 yi​,则 xi​=yi​=−1。

2025-10-10 18:53:20 178

原创 2-STA

有 n 个布尔变量 x1∼xn​,另有 m 个需要满足的条件,每个条件的形式都是 「xi 为truefalse或 xj​ 为truefalse比如 「x1​ 为真或 x3为假」、「x7​ 为假或 x2​ 为假」。2-SAT 问题的目标是给每个变量赋值使得所有条件得到满足。

2025-10-08 21:01:29 252

原创 骑士(基环树+树形dp)

【代码】骑士(基环树+树形dp)

2025-09-26 17:28:48 114

原创 分层图最短路

分层图最短路,如:有k次零代价通过一条路径,求总的最小花费。例题:最近小T赶完了论文,打算继续沉迷星露谷物语。在星露谷物语中,小T的剑面对新矿洞的怪物已经有点力不从心,他想要给自己的剑进行”雷劫升级”。“雷劫升级”需要完成一个小游戏:小T的剑会被送到一个渡劫副本中,副本包括有 nn 个渡劫岛,想要升级成功需要在 nn 个岛屿中任意一个岛上完成渡劫。每个渡劫岛都有一个渡劫难度 aiai​,表示想在 ii 号岛完成渡劫,需要花费 aiai​ 的能量。

2025-09-17 19:14:22 155

原创 点分治(树分治)

d[to]=val;for(auto [to,val] : mp[u]) // 遍历当前节点的所有邻居。for(auto [to,val] : mp[u]) // 遍历当前节点的所有邻居。for(auto [to,val] : mp[u]) // 遍历重心的所有邻居子树。for(auto [to,val] : mp[u]) // 遍历当前重心的所有邻居。

2025-09-10 19:46:02 756

原创 多源最短路径(bitset)

返回它转换为unsigned long long的结果,如果超出范围则报错。返回它转换为unsigned long的结果,如果超出范围则报错。返回它转换为string的结果。将第p + 1位变成1。将第p + 1位变成x。将第p + 1位变成0。将第p + 1位取反。

2025-08-23 18:03:04 189

原创 图的匹配问题

二分图最大匹配二分图最大匹配,顾名思义就是一个点被选中,问最多能选择多少条边换作夫妻匹配问题,就是问在下最多能找到多少对夫妻著名的解决二分图最大匹配问题的算法为,也可以借助模型解决这类问题二分图最大权完美匹配二分图最大权完美匹配,表示此时的二分图的边是带有边权的与二分图最大匹配不同的是,最大权完美匹配侧重于最大权值,要求在保证一个点被选中的前提下,选出的边的边权总和最大换做夫妻匹配问题,同样以为背景,但此时男女生之间存在一种叫的数值,要求好感度总和最大。

2025-08-09 11:36:41 160

原创 拓扑排序(toposort)

比如,如果用一个DAG图来表示一个工程,其中每个顶点表示工程中的一个任务,用有向边表示在做任务 B 之前必须先完成任务 A。故在这个工程中,任意两个任务要么具有确定的先后关系,要么是没有关系,绝对不存在互相矛盾的关系(即环路)。在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。每个顶点出现且只出现一次。

2025-08-09 10:55:19 156

原创 点双连通分量,边双连通分量,强连通分量

在一张连通的无向图中,对于两个点u和v,如果无论删去哪个点(只能删去一个,且不能删u和v自己)都不能使它们不连通,我们就说u和v点双连通。在一张连通的无向图中,对于两个点u和v,如果无论删去哪条边(只能删去一个)都不能使它们不连通,我们就说u和v边双连通。有向图 G 强连通是指,G 中任意两个结点连通。

2025-07-26 16:47:34 256

原创 割点,割边

割边(没有重边时):对于一个无向图,如果删掉一条边后图中的连通分量数增加了,则称这条边为桥或者割边。是指在一个无向图中,如果去掉某个顶点及其所有连接的边后,图就不再连通,那么这个顶点就是割点。

2025-07-25 15:27:53 158

原创 算法数论基础

性质4:对于任意正整数n,ϕ ( n ) = n ( 1 − 1/p 1 ) ( 1 − 1/p 2 ) ( 1 − 1/p 3 ) . . . . ( 1 − 1/p n ) , 其 中 p 1 , p 2 , p 3 , . . . , p n 是 n 的 质 因 子。性质2:如果p,q都是质数,那么ϕ ( p ∗ q ) = ϕ ( p ) ∗ ϕ ( q ) = ( p − 1 ) ∗ ( q − 1 )性质6:若a,b互质,ϕ ( a ∗ b ) = ϕ ( b ) ∗ ϕ ( a )

2025-02-25 23:55:20 1398

原创 LCA(最近公共祖先)

什么是倍增呢,我们可以通过一个例子2^n==2^n-1*2,这样是不是可以把2^n看作两个2^n-1相加组成的,举一个例子像16=8+8。lca的基本思路就是将两个节点一步一步向上去寻找祖先节点,如果找到的两个祖先节点相同,那这个节点就是最近公共祖先,使用倍增优化了这个过程,只不过实现这个算法还要通过dfs去计算出树中各个节点的深度和父亲节点。lca也称为最近公共祖先,广泛应用于没有环的树中,在树中每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。

2025-02-17 22:50:25 482

原创 与(&)、非(~)、或(|)、异或(^)、>>右移、<<左移

5.右移(>>):右移运算在编程中用>>表示,a>>b表示将把a的二进制,整体往右边移动b的单位,得到一个新的二进制,并且自动高位补0,就是相当于除以2^b;6.左移(<<):左移运算在编程中用<<表示,a<<b表示将把a的二进制,整体往左边移动b的单位,得到一个新的二进制,并且自动低位补0,就是相当于乘以2^b;3.或(|):或运算在编程中用|表示,它的运算规则是:有一为一,全零为零。2.非(~):非运算在编程中用~表示,它的运算规则是:零变一,一变零。(a>>b)&1操作:右移后的结果与。

2025-02-04 17:47:57 502

原创 两种经典的算法用于求解最小生成树(MST)

我们要知道可以用哪些方法去存储图,常用的方法是邻接表,邻接矩阵,数组和链式前向星(其实是邻接表的优化,在竞赛中有着广泛的使用),本文采用链式前向星去存图。Prim算法:适合边密集的图,尤其是在不断增加节点的情况下高效;使用了优先队列。Kruskal算法:适合边稀疏的图,通过边的排序和并查集实现,结构明晰。根据具体的图特征和需求选择相应的算法,可以有效地求解最小生成树问题。

2025-02-01 22:25:40 1097

原创 数据结构与算法之字典树

字典树也叫前缀树,是一种用于高效处理字符串匹配问题的树形数据结构,通过字符串之间的公共前缀来节约存储空间,从而提高搜索效率。字典树有两个基本结构节点(Node)和边(Edge),一个节点就是一个字符,从根节点通过边连接到叶子节点组成的字符串就是我们插入的字符串,每一个节点都可能包含很多个子节点,节点可能大概有两种属性。1:bool值(用于去判断从根节点到当前节点的路径是否对应一个完整的单词)我们从2个方面去实现字典树,分别是插入(insert),搜索(find)

2025-01-30 22:10:38 158

原创 数据结构之并查集

并查集一般用于构建最小生成树,路径压缩。并查集是一种树形的数据结构。并查集由nion,find,fa数组构成。fa数组为各个元素的父亲结点,初始化的时候各个元素的父亲结点就是自己,当两个元素之间有“亲子”关系的时候,就得将其中一个元素的父亲结点变为另外一个元素父亲结点,这个操作称为nion。nion操作的时候我们要去查找父亲结点,这个操作称为find,find操作一般是用递归的方法去查找。通过并查集可以建立元素之间的关系。

2025-01-27 21:58:50 139

原创 KMP算法

kmp算法是用来进行字符串匹配的,通过两个方面去实现它。1.next数组的实现。

2025-01-19 18:30:23 115

原创 c++中对于优先级队列的操作总结

【代码】c++中对于优先级队列的操作总结。

2025-01-18 16:37:14 173

原创 c++中对set<int> s操作总结。

set是c++中的一种数据结构,set可以进行各种操作去实现一些特殊的算法,包括增删查,大小检查,lower_bound,upper_bound,find,count,rbegin,rend,特殊操作等,本篇将说明和实现这些操作。set提供了一种方便的方法去查找集合中>=给定值的第一个元素,称为lower_bound;查找集合中>给定值的第一个元素,称为upper_bound;count方法是去判断集合中有无此元素。1.增删查,大小检查。

2025-01-18 13:46:31 298

原创 图论:dijkstra算法

若对于顶点 s 存在能直接到达的边(s,m),则把dis[m]设为w(s, m),同时把所有其他(s不能直接到达的)顶点的路径长度设为无穷大。然后,我们需要看看新加入的顶点是否可以到达其他顶点并且看看通过该顶点到达其他点的路径长度是否比源点直接到达短,如果是,那么就替换这些顶点在dis中的值。然后,从dis数组选择最小值,则该值就是源点s到该值对应的顶点的最短路径,并且把该点加入到T中,OK,此时完成一个顶点,然后,又从dis中找出最小值,重复上述动作,直到遍历了所有路径并且T中包含了图的所有顶点。

2024-11-10 15:02:37 363

原创 求递推序列的第N项

有一个序列是这样定义的: f(1)=1,f(2)=1,f(n)=(A×f(n−1)+B×f(n−2))mod7给出 A , B 和 N ,求 f(n) 的值。

2024-08-04 23:07:17 601 1

空空如也

空空如也

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

TA关注的人

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