ACM
文章平均质量分 77
这个专栏记录了我的ACM生涯所学所思,希望对你有所帮助!
小满M
加油٩(๑❛ᴗ❛๑)۶
展开
-
常见动态规划问题
3.原创 2024-04-27 14:04:17 · 690 阅读 · 0 评论 -
数据结构(并查集,ST表)
【代码】数据结构(并查集,ST表)原创 2024-04-27 13:55:47 · 209 阅读 · 0 评论 -
二分图(Bipartite Graph)
题意:有2的集合,n个人,m对矛盾关系,每对关系分别涉及到x,y两人,矛盾值为w。方法:染色法——》用两种颜色,对所有顶点逐个染色,且相邻顶点染不同的颜色,如果发现相邻顶点染了同一种颜色(即存在奇环),就认为此图不为二分图。题意:有n个英雄,可以杀若干个怪兽,每个英雄只能杀一次,至多有k个英雄可以有两次杀怪兽的机会,问最多可以杀多少只怪兽。任何无回路的的图均是二分图。题意:有n个女孩,m个男孩,k对男女关系x,y,表示女孩x愿意跟男孩y做partner,求最大组合数。解法:有限制匹配个数的二分图最大匹配。原创 2024-04-27 13:53:47 · 906 阅读 · 0 评论 -
AC自动机
多模式匹配:模式串有多个,主串只有一个,要进行多次模式串匹配。AC自动机就可以做到,只要经过一些预处理之后,扫描一遍主串,就可以找出所有模式串。题意:给你M个模式串,问有多少种方案 构造长度为N的 至少包含K个模式串的 串。1.字符串会包含,如有模式串she he,串she包含由模式串she和he。有一点 串包含 的意思在里面,所以可以想到用AC自动机把模式串全部扔进去。为结尾的所有后缀的个数加起来,从而把匹配的模式串加起来。题意:多组样例,每次给出N个字符串,求出N个串的母串。:通过fail指针,把以。原创 2024-04-27 13:42:18 · 594 阅读 · 0 评论 -
最大公约数 和 最小公倍数
拉梅定理:用辗转相除法计算两个正整数的最大公因子时,所需的除法次数不会超过两个整数较小的那个数的倍数的5倍。感性认知:一个数%x的结果=这个数+y%x的结果,当且仅当x是y的因子。这道题数据比较大(ull),当数据较大时,可以考虑先除后乘。从这道题,我们也可以看出,__gcd()可以求很大的数。有时,也可以直接使用。原创 2024-04-27 13:35:56 · 1019 阅读 · 0 评论 -
约数(又称因数)
常用与一些于因子有关的计算,如计算 $\sum_{i=1}^{n} \sum_{d|n} d $ 或者。:任何一个大于1的数都可以被分解成有限个质数乘积的形式 $N=\prod_{i=1}如果能知道一个大数(1e18)的质因子分解情况,可以直接。当2及其它质数的指数都取偶数时(即平方数),有。当2的指数取奇数,其他质数的指数取偶数时,有。,搞出这个大数的所有因子,效率更快!的思路是,对于每个数d,它的倍数。随机数据下,约数个数的期望是。,当乘积的每一项都为奇数时,是MOD的倍数时,即。原创 2024-04-27 13:26:43 · 960 阅读 · 0 评论 -
最短路(Dijkstra, Bellman-Ford, SPFA, Floyd)
每次迭代,取出队头的点v,依次枚举从v出发的边v->u,设边的长度为len,判断Dist[v]+len是否小于Dis[u],若小于则改进Dist[u],将Fa[u]记为v,并且由于S到u的最短距离变小了,有可能u可以改进其它的点,所以若u不在队列中,就将它放入队尾。这样一直迭代下去,直到队列变空,也就是说S到所有结点的距离都确定下来,结束算法。Bellman-Ford:每一次松弛的时候Bellman-Ford都要枚举所有的点,而其实很多点都是不需要被枚举的,所以会有很多的无效枚举,使得算法效率降低。原创 2024-04-27 12:58:30 · 1707 阅读 · 0 评论 -
最小生成树(Prim 和 Kruskal)
【代码】最小生成树(Prim 和 Kruskal)原创 2024-04-27 12:56:04 · 103 阅读 · 0 评论 -
拓扑排序(topological-sort)
如果拓扑序列点的数量不等于总点数,那么有环。2.在遍历树时,数出上头需要当前点几次。原创 2024-04-27 12:54:31 · 181 阅读 · 0 评论 -
图的基础内容
G里,设两个点 a,b,由a有一条路可以走到b,由b又有一条路可以走到a,我们就叫这两个顶点(a,b)强连通。的边集的一个子集,使得这个子集中的任意两条边没有公共顶点且不包含自环。G中,有一个子图,这个子图每2个点都满足强连通,我们就叫这个子图叫做 强连通分量。:一个结点称为割点(或者割顶)当且仅当去掉该节点极其相关的边之后的子图不连通。的点集的一个子集,使得边集中的任意一条边都至少有一个端点在这个子集中。:一条边称为桥(或者割边)当且仅当去掉该边之后的子图不连通。掌握好图的存储方式:链式前向星。原创 2024-04-27 12:51:09 · 175 阅读 · 0 评论 -
树状数组(Binary Indexed Tree)
应用:1.修改单个数询问区间和。2.整个区间加(即整个区间每个数都修改),然后去查单点的值。——》差分。原创 2024-04-27 12:48:16 · 619 阅读 · 0 评论 -
线段树(Segment Tree)
线段树线段树是用一种树状结构来存储一个连续区间的信息的数据结构。线段树的几点性质:1.线段树是平衡(左子树和右子树的高度差最大为1)的二叉树,最大深度为log2n(n为线段树所表示区间的长度)2.树中的每一个节点代表对应一个区间(叶子节点是一个点…)3.每个节点(所代表的区间)完全包含它的所有子孙节点4.对于任意两个节点(所代表的区间):要么完全包含,要么互不相交5.在进行区间操作和统计时把区间等价转换成若干个子区间(logn个)的相同操作。关键在于理解好:这棵树的每一个结点代表的是一个区原创 2024-04-27 12:16:37 · 563 阅读 · 0 评论 -
双指针(尺取法)
双指针顾名思义,同时使用两个指针维护或者统计一些的。特别是在等数据结构中,双指针的算法能大大减少我们的编码速度以及时间复杂度。原创 2024-04-27 12:07:05 · 541 阅读 · 0 评论 -
差分及其应用
在两个vector里查找,看看起点的数量是否匹配终点的数量,就可以判断查询的点是否被覆盖。细节点:起点要用upper_bound()去找,终点要用lower_bound()去找。答:用两个vector,一个存区间起点,一个存区间终点,然后两个vector都排序。积分,并且获得相应的元素编号(可以重复获得元素编号),问没有获得。次查询,每次查询一个时间点是否被禁止通话。种元素编号的情况下可以得到的最大积分。个时间段,这些时间段是禁止通话的。次可选择的操作,每次操作可以使区间。的数组(每个元素为0),有。原创 2024-04-27 12:03:51 · 845 阅读 · 0 评论 -
一维前缀和+二维前缀和
的数列,求出最大的子数列和。要求输出 最大子数组和、左边界、有边界。(如果有多个子数组的和最大,输出字典序最小的左边界和有边界),可以在遍历右边界的过程中去维护。个给定的矩阵中有多少个矩阵满足。算法思路:对于固定的右边界。所围成的子矩形的前缀和。次询问,每次询问给出。解题思路:2D前缀和。原创 2024-04-27 11:57:17 · 882 阅读 · 0 评论