自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 吉司机线段树

吉司机线段树

2022-10-25 13:19:32 655 3

原创 树上启发式合并 (dfs on tree)

树上启发式合并

2022-10-10 17:46:13 155

原创 FFT例题

FFT,NTT,FFT优化,模版P3723 [AH2017/HNOI2017] 礼物ABC196 F. Substring 2CF528D Fuzzy SearchCF1709F Multiset of Strings

2022-10-03 16:53:54 449

原创 斜率优化dp例题

斜率优化 任务安排

2022-09-24 14:14:00 434

原创 幂塔的计算 (欧拉降幂)

形如以下式子的东西叫做幂塔:aaaa...a^{a^{a^{a^{...}}}}aaaa...题目给定a,n,ma,n,ma,n,m,计算aaa的nnn层幂塔对mmm取模后的结果。(1<=a,n,m<=1e61<= a,n,m<=1e61<=a,n,m<=1e6)解法欧拉降幂公式运用欧拉降幂递归求解即可。具体过程:定义的递归函数形式:f(a,n,m)f(a, n, m)f(a,n,m),表示aaa的nnn层幂塔对mmm取模后的结果。首先是对

2021-12-24 20:55:32 2065

原创 网络流专题练习

网络流之二分图匹配、关键边、最大流判定、拆点

2021-12-03 13:46:15 253

原创 [模版] spfa费用流

#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <set>#include <map>#include <queue>#include <stack>#include <vector>#include <string>#include <algorith.

2021-11-30 21:24:48 263

原创 最小权点覆盖与最大权独立集

文章目录一、概念二、最小权点覆盖求法2.1 建图方法2.2 证明简单割与点覆盖集的对应关系三、最大权独立集求法一、概念最小权点覆盖:选出图中的一些点构成一个点集,使得该点集内的点可以覆盖原图中所有边,覆盖是指对于任意一条边,其两端的端点至少有一个是被选中的。那么对于每个点我们给他一个权值,所有点覆盖集中,总权值和最小的一个就是所说的最小权点覆盖集。最大权独立集:独立集是和点覆盖集对偶的一个概念,独立集是指一个点集,点集中任意两点之间是不存在边的,也就是点和点之间相独立,并不相连。而在所有独立集中,

2021-11-29 22:21:12 1602

原创 最大密度子图

文章目录一、概念二、求法1、问题转化2、求解过程一、概念对于一个图G<V,E>G<V,E>G<V,E>,选出其一个子图G′<V′,E′>G^{'}<V^{'},E^{'}>G′<V′,E′>。要求如果选择了一条边,那么该边的端点也要被选,同时要使得∣E′∣∣V′∣\frac {|E^{'}|}{|V^{'}|}∣V′∣∣E′∣​最大。该图就是最大密度子图。二、求法1、问题转化要求∣E′∣∣V′∣\frac {|E^{'}|

2021-11-24 20:42:18 435

原创 最大权闭合子图的简单证明

一、概念闭合图:对于一个有向图GGG,设VVV是图中的某一点集,那么从该点集中的任何一点沿着它连出去的边走,走到的点还是属于点集VVV,这些点集以及它们之间的边形成的图就是闭合图。最大权闭合子图,顾名思义,就是所有闭合子图中点权之和最大的那个,注意这里的权指的是点权,不是边权,因为闭合图是对于点集而言的。结论:最大权闭合子图===所有正点权的和−-−最小割。二、证明2.1流网络的构造对于一个有向图GGG,先将其构造成一个流网络G′G^{'}G′:从源点sss向图中所有的正点权连接一条容量是该

2021-11-21 23:27:15 583

原创 2021CCPC桂林 E. Buy and Delete(有向图的最小环)

题目链接题目大意:有一个有向边集EEE,每个边有一个花费ppp,一开始有一个空图GGG,AliceAliceAlice有ccc元钱,现在她需要从边集EEE中选出来一些边添加到GGG中,且这些边的总花费不能超过ccc。BobBobBob需要对图GGG进行删边操作,每次BobBobBob可以从图GGG中选出一些边满足这些边是无法组成环的,然后从图中删除它们,直到GGG中没有边。现在AliceAliceAlice需要选出一些边使得BobBobBob的操作次数最多,BobBobBob删除边时会进行最优操作。输出

2021-11-17 22:05:53 906

原创 无向图的双连通分量

文章目录定义例题冗余路径电力矿场搭建定义在一张连通的无向图中,对于两个点u和v,如果无论删去哪条边(只能删去一条)都不能使得它们不连通,则称u和v边双连通。在一张连通的无向图中,对于两个点u和v,如果无论删去哪个点(只能删去一个,且不能删去u和v自己)都不能使得它们不连通,则称u和v点双连通。边双连通具有传递性,即若x,y边双连通,y,z边双连通,则x,z边双连通。点双连通不具有传递性。割点:对于一个无向图,如果把一个点删除后这个图的极大连通分量数增加了,那么这个点就是这个图的割点。割边:对于

2021-11-15 21:15:47 568

原创 高斯消元专题训练

文章目录POJ 1222 EXTENDED LIGHTS OUTPOJ 1222 EXTENDED LIGHTS OUT题意:给定一个555行666列的010101矩阵,每一个小格子代表一个开关,000表示开关关闭,111表示开关闭合,当按下一个开关后,其也会影响该开关上下左右的开关的状态。现在给定一个这样的01矩阵,输出一种方案,使得所有开关都变成闭合状态。思路:555行666列,相当于一共是303030个未知数,可以根据题意列出303030个方程,然后高斯消元,因为都是010101,所以是解异或

2021-11-04 18:06:34 521

原创 树链剖分专题训练

题目链接[HAOI2015]树上操作数据范围:n,m<=100000n,m<=100000n,m<=100000树剖模版题。#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <set>#include <map>#include <queue>#include <stac

2021-10-27 15:07:25 182

原创 平衡树专题训练

题目链接普通平衡树平衡树模版,splaysplaysplay实现。#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <set>#include <map>#include <queue>#include <stack>#include <vector>#include

2021-10-27 13:23:19 163

原创 [模版]树套树

文章目录线段树套平衡树树套树-简单版树套树线段树套平衡树当需要维护指定区间内的前驱,后继,第 kkk大,某个数的排名,或者插入删除的时候,我们通常需要使用平衡树来满足我们的需求,即线段树套平衡树。树套树-简单版针对一些比较简单的操作,可以不用真的自己在手写一个平衡树,STLSTLSTL中的setsetset就完全够用了。#include <iostream>#include <cstdio>#include <cmath>#include <cst

2021-10-26 20:14:29 108

原创 [模版] 树链剖分

树链剖分是解决树上问题的一种常见数据结构,对于树上路径修改及路径信息查询等问题有着较优的复杂度。树链剖分分为两种:重链剖分和长链剖分,通常说的树链剖分指的是重链剖分。一些名词:重儿子:每个点的子树中,子树大小(即节点数)最大的子节点(如果有多个节点,任选一个)轻儿子:除重儿子外的其他子节点重边:每个节点与其重儿子间的边轻边:每个节点与其轻儿子间的边重链:重边连成的链轻链:轻边连成的链剖分后的树有一个性质:从根到某一点的路径上轻链、重链的个数都不大于lognlognlogn。树链剖分就是将树

2021-10-24 16:31:02 192

原创 后缀自动机专题练习

一、SAM的性质:SAMSAMSAM是个状态机。一个起点,若干终点。原串的所有子串和从SAMSAMSAM起点开始的所有路径一一对应,不重不漏。所以终点就是包含后缀的点。每个点包含若干子串,每个子串都一一对应一条从起点到该点的路径。且这些子串一定是里面最长子串的连续后缀。SAMSAMSAM问题中经常考虑两种边:(1)(1)(1) 普通边,类似于TrieTrieTrie。表示在某个状态所表示的所有子串的后面添加一个字符。(2)(2)(2) Link、FatherLink、FatherLink、Fath

2021-10-20 17:30:03 433

原创 [模版]dinic算法

算法流程与EK算法类似,相当于对EK算法做了一些优化。EK算法每次只寻找一条增广路,dinic算法每次寻找多条增广路。时间复杂度:O(n2m)O(n^2m)O(n2m)然而实际运行效率是很快的,一般100001000010000~100000100000100000的问题规模都没问题。模版:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#inclu

2021-10-10 10:37:45 136

原创 [模版]EK算法

算法步骤:从源点开始,用BFS找一条最短的增广路径,计算该路径上的残量最小值,累加到最大流值;沿着该路径修改流量值,实际是修改是残量网络的边权;重复上述步骤,直到找不到增广路时,此时得到的流就是最大流。时间复杂度:O(nm2)O(nm^2)O(nm2),nnn是点数,mmm是边数。但实际情况中,EK算法的复杂度远低于理论上的复杂度,一般100010001000~100001000010000的规模EK算法都可以解决。模板题:Acwing2171.EK求最大流#include <i

2021-10-09 19:11:40 274

原创 莫比乌斯反演

莫比乌斯函数对于一个正整数nnn,μ(n)\mu(n)μ(n)为其莫比乌斯函数。莫比乌斯函数是怎么样定义的呢?首先,对于任意一个正整数nnn来说,由算数基本定理知,一定可以将其分解成n=p1a1p2a2...pkakn=p_1^{a_1}p_2^{a_2}...p_k^{a_k}n=p1a1​​p2a2​​...pkak​​的形式。定义μ(n)={(−1)k, a1=a2=...=ak=10, otherwise\mu(n)=\begin{cases} (-1)^k,\ a_1=

2021-09-29 21:14:27 1348

原创 学习笔记:整除分块

有这样一个式子:∑i=1n⌊ni⌋\sum_{i=1}^n\lfloor \frac{n}{i} \rfloor∑i=1n​⌊in​⌋,求出它的结果。我们当然可以从111到nnn一个一个算,但这样太慢了。先看一个例子,当n=20n=20n=20的时候:可以看到,有许多不同的iii值对应的其实是相同的结果。我们是不是可以找到一个区间[l,r][l,r][l,r],使得⌊nl⌋\lfloor \frac{n}{l} \rfloor⌊ln​⌋一直到⌊nr⌋\lfloor \frac{n}{r} \rf

2021-09-29 14:03:05 226

原创 简单博弈论

文章目录巴什博弈尼姆博弈巴什博弈问题:只有一堆nnn个物品,两个人轮流从这堆物品中取物, 规定每次至少取一个,最多取mmm个。最后取光者得胜。若只有000 ~ mmm个物品,先手必胜。若有m+1m+1m+1个物品,先手必败。因为先手最多取m个,不管先手取多少个,后手都可以一次取完若有(m+1)+r,(1<=r<=m)(m+1)+r,_{(1<=r<=m)}(m+1)+r,(1<=r<=m)​个,先手必胜。这种情况下,先手可以拿rrr个,轮到后手拿的时候,就

2021-09-27 14:08:57 312

原创 高斯消元解线性方程组

高斯消元是一种求解线性方程组的方法,时间复杂度为O(n3)O(n^3)O(n3)。对于这样NNN个NNN元一次方程组:{a11x1+a12x2+...+a1nxn=b1a21x1+a22x2+...+a2nxn=b2............an1x1+an2x2+...+annxn=bn\begin{cases}a_{11}x_1+a_{12}x_2+...+a_{1n}x_n=b_1\\a_{21}x_1+a_{22}x_2+...+a_{2n}x_n=b_2\\............\\

2021-09-26 11:39:22 950

原创 中国剩余定理和扩展中国剩余定理代码模版

#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <set>#include <map>#include <queue>#include <stack>#include <vector>#include <string>#include <algorithm

2021-09-22 22:27:20 156

原创 ACM中一些常用数学公式定理的简单推理及证明

文章目录更相减损术更相减损术gcd(a,b)=gcd(a,b−a)gcd(a,b)=gcd(a,b-a)gcd(a,b)=gcd(a,b−a)证明:证明:证明:若有gcd(a,b)=dgcd(a,b)=dgcd(a,b)=d,则有a=k1d, b=k2da=k_1d,\ b=k_2da=k1​d, b=k2​d,且k1k_1k1​与k2k_2k2​一定互质,即gcd(k1,k2)=1gcd(k_1,k_2)=1gcd(k1​,k2​)=1。设gcd(a,b−1)=xdgcd

2021-09-22 13:44:46 1012

原创 KMP与AC自动机 和 DP的结合

设计密码你现在需要设计一个密码 S,SS,SS,S 需要满足:S 的长度是 N;S 只包含小写英文字母;S 不包含子串 T;例如:abcabcabc 和 abcdeabcdeabcde 是 abcdeabcdeabcde 的子串,abdabdabd 不是 abcdeabcdeabcde 的子串。请问共有多少种不同的密码满足要求?(由于答案会非常大,请输出答案模 1e9+71e9+71e9+7 的余数。)输入格式第一行输入整数NNN,表示密码的长度。第二行输入字符串T,TT,TT,T中只

2021-09-21 18:10:31 172

原创 Splay

请写一个程, 要求维护一个数列, 支持以下 6 种操作:1、插入:在当前数列的第 posi 个数字后插入 tot 个数字:c1, c2, …, ctot;若在数列首插 入,则 posi 为 02、删除:从当前数列的第 posi 个数字开始连续删除 tot 个数字3、修改:从当前数列的第 posi 个数字开始连续删除 tot 个数字4、翻转:取出从当前数列的第 posi 个数字开始的 tot 个数字,翻转后放入原来的位置5、求和:计算从当前数列的第 posi 个数字开始的 tot 个数字的

2021-09-18 16:35:00 129

原创 AC自动机

前置技能:KMP和trie树。AC 自动机是一种用于解决多模式串以及一主串匹配的字符串算法。问题通常是给出若干个模式串 S 以及主串 T,询问若干个模式串分别在主串中的某些信息。AC 自动机构建在 Trie 的结构基础上,结合了 KMP 算法的失配指针思想。P3808 【模板】AC自动机(简单版)题目描述给定 n 个模式串 Si 和一个文本串 T,求有多少个不同的模式串在文本串里出现过。两个模式串不同当且仅当他们编号不同。输入格式第一行是一个整数,表示模式串的个数 n。第 2 到第 (

2021-09-18 16:09:28 152

原创 普通平衡树(模版)

#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<sstream>#include<map>#include<stack>#include<queue>#include<string>#include<vector>#include<algorithm>#.

2021-05-14 15:13:06 163

原创 每日一题:5.8 --?

5.8:Hoof, Paper, Scissor G(蹄子,剪刀,布)思路:动态规划状态设计:F [ i ] [ j ] [ k ] 表示第i轮,变换了j次手势,且最后一次出的是k状态计算:首先,如果下一轮的出拳和和上一轮一样的话,也就是不用边f[i][j][k] = f[i - 1][j][k]如果变的话,设上一轮出拳是x(x与k不相同)f[i][j][k] = f[i - 1][j - 1][x]#include<cstdio>#include<cmath>

2021-05-08 16:08:47 94

原创 第K小数---可持久化线段树(静态)

#include<cstdio>#include<cmath>#include<ctime>#include<cstring>#include<iostream>#include<map>#include<set>#include<stack>#include<queue>#include<string>#include<vector>#define l.

2021-05-04 13:33:20 115

原创 最长回文子串——马拉车算法(manacher)

1、为了规避奇偶串的不同情况,对原串进行一下处理:原串 abcd —> #a#b#c#d#原串 1234 —> #1#2#3#4#即间隔插入分隔符 ‘#’ ;这样以来,所有的回文子串都变成的奇数长度。2、引入变量:p数组,mx, mid;设str是对原串处理后的新串。p[i]表示以str[i]为中心的最长回文子串的半径,不难推出原串的长度是p[i] - 1。mx是已经计算过的所有回文串能到达的最右端的边界,mid是该回文串的中心。接下来是求解p[i]的过程,(求p[i]时,p[

2021-05-01 19:28:41 337

原创 每日一题(4.27 - 5.2)

4.27 :天才ACM思路:可以先固定区间左端点L,这样问题就变成了在区间[L, R] 的校验值不超过T的情况下,R最大能取到多少。可以明显的发现该问题具有单调性,符合二分的性质,但是由于n的范围比较大二分的区间比较长,当答案都很小时,二分反而会浪费很多时间。所以我们采用倍增的写法来扩展区间右端点R。由于本题数据规模庞大且是多组输入,发现这样依然会超时。时间复炸度为O(nlog2n),可以发现,我们每次将新扩展的数加入区间时,可以不用对整个数组排序,因为原来的一部分已经是有序的,只有新加进来的数

2021-04-27 20:39:46 121

原创 严格次小生成树

求解步骤:1、先求一遍最小生成树,并把所有边标记为树边与非树边。2、按最小生成树(即树边)建图。3、预处理F[x, k], d1[x, k], d2[x, k] F[x, k]:从点x向根走2^k步到达的节点 d1[x, k]:从点x向根走2^k步经过的所有边的最大值 d2[x, k]:从点x向根走2^k步经过的所有边的次大值4、枚举每一条非树边{a, b, c} 在树中从a到b的路径中找到最大边权与次大边权与该非树边交换#include<cstdio>#include&.

2021-04-26 21:01:39 133

原创 最近公共祖先(LCA)

求法一:树上倍增法设F[x, k]表示x的2k辈的祖先,即从x先根节点走2k步到达的节点。特别的,日狗该节点不存在(即超出了根节点),则另F[x, k] = 0.F[x, 0]就是x的父节点。除此之外,对于任意的和合法k,都有F[x, k] = F[ F[x, k-1], k - 1]。这是类似于一个动态规划的过程,“阶段”就是节点的深度。因此,我们可以对树进行广度优先遍历,按照层次顺序,在节点入队之前,计算它在F数组中的相应的值。以上部分是预处理,时间复杂度为O(nlogn),之后可以多次对不同的

2021-04-25 17:38:30 130

原创 希尔伯特曲线

1、由编号求坐标struct point {ll x, y;};point get(ll n, ll id){ if(n == 0) return {0, 0}; ll tot = 1ll << n * 2 - 2, len = 1ll << n - 1; point p = get(n - 1, id % tot); ll x = p.x, y = p.y; int area = id / tot; if(area == 0) return {y

2021-04-22 14:22:26 595 1

原创 spfa判断负环回路

经典例题:虫洞#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<map>#include<stack>#include<queue>#include<string>#include<vector>#include<algorithm>#define ll long l

2021-04-19 22:45:48 119

原创 Floyd扩展应用

给定一张无向图,求图中一个至少包含 3 个点的环,环上的节点不重复,并且环上的边的长度之和最小。该问题称为无向图的最小环问题。你需要输出最小环的方案,若最小环不唯一,输出任意一个均可。输入格式第一行包含两个整数 N 和 M,表示无向图有 N 个点,M 条边。接下来 M 行,每行包含三个整数 u,v,l,表示点 u 和点 v 之间有一条边,边长为 l。输出格式输出占一行,包含最小环的所有节点(按顺序输出),如果不存在则输出 No solution.。#include<cstdio>

2021-04-09 15:26:01 90

原创 c++矩阵模板

给出一个N * N的矩阵,其中的元素均为正整数。求这个矩阵的M次方。由于M次方的计算结果太大,只需要输出每个元素Mod (10^9 + 7)的结果。#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<sstream>#include<unordered_map>#include<stack>#include&lt

2021-04-07 22:59:29 254

空空如也

空空如也

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

TA关注的人

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