![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习笔记
文章平均质量分 74
cryozwq
这个作者很懒,什么都没留下…
展开
-
[复习]杜教筛
杜教筛的推导过程懒得写了,反正是复习,记个结论吧。对于我们要筛的积性函数 fff ,构造一个函数 ggg,记 f∗g=hf*g=hf∗g=h。我们的目标是求 fff 前缀和 sss。那么有g(1)s(n)=∑i=1nh(i)−∑i=2ng(i)s(⌊ni⌋)g(1)s(n)=\sum\limits_{i=1}^nh(i)-\sum\limits_{i=2}^ng(i)s(\lfloor\frac{n}{i} \rfloor)g(1)s(n)=i=1∑nh(i)−i=2∑ng(i)s(⌊in⌋)原创 2022-04-06 00:26:12 · 157 阅读 · 0 评论 -
[复习]prufer 序
对于一棵 nnn 个点无根树,其 prufer 序长度为 n−2n-2n−2,具体来说,每次选择一个编号最小的叶子节点并且删除它,记录下它的父亲,显然 n−2n-2n−2 次操作后还剩下 222 个点。首先显然任何一个无根树都能转化为 prufer 序。然后需要说明任意 prufer 序都能唯一对应一棵无根树,度数为 xxx 的点在 prufer 序中出现 x−1x-1x−1 次,那么考虑按照度数来构造,从左到右扫一遍,对于每个点和当前最小的叶子连边即可。这里再说一下构造的复杂度,用堆 O(nlog原创 2022-04-06 00:14:51 · 273 阅读 · 0 评论 -
SAM学习笔记
并没有完全理解,处于只会板子阶段。SAM 就是后缀自动机,比较为大众所接受的定义是:一个接受 sss 所有后缀的最小自动机。什么是自动机比较通俗的说法是一张 DAG ,有一个起始点,路径上有字符。(定义是什么并不重要)。SAM 的定义是,从起始点走到每个节点一定是原串的一个子串,并且全部子串都在里面。至于为什么会跟子串问题产生关系,先来看看什么事后缀 trie.后缀 trie/后缀树问题:求一个字符串本质不同的子串数量。解法:后缀 trie,插入 S 的所有后缀,从根节点到 trie 每个节点原创 2022-03-02 22:00:56 · 177 阅读 · 0 评论 -
简单博弈论小结
-1.ICG公平游戏,每个状态都是先手必胜或先手必败。#∗(@*(@∗(@&(%&$((省略一堆定义)0.SG 函数SG 函数表示对当前局面的评估,SG(S)=mex(SG(S′))S′∈nxt(S)SG(S)=mex(SG(S'))S'\in nxt(S)SG(S)=mex(SG(S′))S′∈nxt(S),nxt(S)nxt(S)nxt(S) 表示当前局面的后继局面的集合。1.nim游戏:万 恶 之 源nnn 堆石头,每堆 aia_iai 个,每次选一堆取任意个,没得取就G原创 2021-11-25 00:04:36 · 2590 阅读 · 0 评论 -
二项式反演
an=∑k=0nCnkbka_n=\sum\limits_{k=0}^nC_{n}^{k}b_kan=k=0∑nCnkbk可以得到bn=∑k=0nCnkak(−1)n−kb_n=\sum\limits_{k=0}^nC_{n}^{k}a_k(-1)^{n-k}bn=k=0∑nCnkak(−1)n−k做题!原创 2021-09-28 21:51:46 · 69 阅读 · 0 评论 -
数学基础算法复习
基础阶乘0!=10!=10!=1组合数a(n,m)=n!(n−m)!a(n,m)= \frac{n!}{(n-m)!}a(n,m)=(n−m)!n!$c(n,m)= \frac{n!}{(n-m)!m!} $c(n,m)=c(n−1,m−1)+c(n,m−1)c(n,m)=c(n-1,m-1)+c(n,m-1)c(n,m)=c(n−1,m−1)+c(n,m−1)快速幂ll qp(ll b,ll p,ll mod){ ll tmp=b,ans=1; while(p){ if(p&am原创 2021-09-27 20:02:05 · 144 阅读 · 0 评论 -
最短路树 科普笔记
一个非常冷门的知识点(大概吧)基础定义定义:一个 nnn 个点,mmm 条边的无向图,最短路树是图上的一棵生成树,以一个节点 xxx 为根,满足对于任意 i(1≤i≤n,i≠x)i(1\le i\le n,i\neq x)i(1≤i≤n,i=x),树上两点最短路的距离等于原图两点最短路距离。性质:第一个即是其定义,第二个是我这个民科自己想的,不一定对:对于两个节点 u,vu,vu,v 满足同属于最短路树上的一条链,那么二者原图上的最短路就是树上两点到根节点距离之差。(证明:考虑反证,若两点有更短的原创 2021-09-01 20:49:54 · 567 阅读 · 0 评论 -
数位 DP
试图换个写法。回想一下在小学和初中遇到的两类问题:页码问题:给定一本书,页码编号 111~500500500,试求出这本书有多少页的页码上含有 111 这个数字?初一数学题:定义“十全十美”数是指一个数能被 101010 整除且数位之和相加是 101010 的倍数,试求…如此这般的问题,不得不说贯穿了从小学到初中,你是否想过把它们出成一道 OI 题?没错就是在讽刺把 MO 题搬到 OI 的屑行为有人这么想了,还这么干了,于是就出现了数位 DP。先来看一下页码问题,小学的时候我们怎么解决这个问题原创 2021-08-20 23:20:16 · 120 阅读 · 0 评论 -
Kruskal 重构树 学习笔记
算法介绍Kruskal 重构树就是在 Kruskal 算法过程中重新建出了一棵树,这棵树具有一些优美的性质可以解决一类问题,下面就详细叙述一下:首先复习一下什么是 Kruskal 算法,本质上来说这是一种贪心算法,用于解决最小生成树的问题,把所有边权由小到大排序,用并查集维护连通性,若当前边 (u,v)(u,v)(u,v) 不联通,就把当前边加入到最小生成树中。下面说说什么是 Kruskal 重构树,在 krusakl 算法过程中,每当一条边 (u,v)(u,v)(u,v) 被加入最小生成树,令 gu原创 2021-08-19 10:39:44 · 177 阅读 · 0 评论 -
莫比乌斯反演学习笔记
为啥学习莫比乌斯反演?是因为最近 CF 连着两次莫反让我感觉到自己没有力量。待填坑。原创 2021-08-17 23:11:42 · 110 阅读 · 0 评论 -
2021-08-17 圣 诞 节 的 复 习
CDQ 分治CDQ 分治是一种分治算法废话,大部分时候用于解决偏序问题,或者优化含有偏序形式的一些转移方程。首先要知道,什么事偏序问题,即是一些物体含有若干属性 aia_iai,bib_ibi,cic_ici…要求满足满足对于每个属性都有一个大小关系约束的数对 (i,j)(i,j)(i,j) 的数量,形如:ai<aja_i < a_jai<aj 或者 ai>aja_i > a_jai>aj …bi<bjb_i < b_jbi<原创 2021-08-17 20:13:53 · 74 阅读 · 0 评论 -
网络流学习笔记#2:最小费用最大流和最小割树
文接网络流学习笔记#1:最大流和最小割。约定cost(u,v)cost(u,v)cost(u,v) 表示 uuu 到 vvv 的费用费用流定义在一个流网络中,有源点和汇点 s,ts,ts,t,每条边都有一个容量和 ,sss 有无限的流量流向 ttt,在满足流量最大的前提下使得费用最小。解法这种情况下,找增广路不再可以找到答案,为什么呢?因为费用不一定最小,那怎么办?使用 SPFA!(为什么?有负权边呢)完了(...原创 2021-08-02 18:04:50 · 208 阅读 · 0 评论 -
网络流学习笔记#1:最大流和最小割
-3.前言两年以前,那时连基础算法都不甚熟悉,却因为看到 Leasier 会这么多高深和深奥的算法而嫉妒,下定了决心,要学一些“看起来很高深的算法”,可是呢,一方面自己实力不足,另一方面是自己的懒惰,最终呢,也就仅仅是复制了一篇题解,过了个模板而已,至于这个“网络流”究竟是什么,还是一问三不知。现在,终于有机会重新面对这个算法了。-2.一些约定(u,v)(u,v)(u,v) 表示一条从 uuu 到 vvv 的有向边。sss 表示源点,ttt 表示汇点。如无特殊说明,我们所讲的图都是有向无环图,有原创 2021-08-02 17:07:09 · 225 阅读 · 0 评论 -
换根 DP 学习笔记
简介换根 DP 是树形 DP 的一个分支,用于解决根节点不确定的问题,可以把 O(n)O(n)O(n) 枚举根节点的过程通过两次 dfs 优化掉,(据说)是一种重要的技巧。分析以一道经典例题 [POI2008]STA-Station 为例。题意非常明了了,不解释了。正如一般换根 DP 学习笔记的套路,我们先想想怎么 O(n2)O(n^2)O(n2) 的解决这个问题,非常简单,我们可以枚举一个根,然后 O(n)O(n)O(n) dfs 查询深度最后取 max\maxmax。显然 O(n2)O(n原创 2021-07-29 21:27:48 · 89 阅读 · 0 评论 -
课堂笔记 2021.7.27-2021.7.28
动态开点线段树众所周知,一棵线段树会包含很多节点,但是有很多节点都用不上,这样就会造成空间的浪费,有什么办法解决空间浪费呢?就是当我们需要的时候再去开点,不预先建树。void build(int &i,int l,int r,int num,int k){ if(!i) i=++ecnt; if(l==r){ t[i].v+=k; return ; } int mid=(l+r)/2; if(num<=mid) build(t[i].ls,l,mid,num,k)原创 2021-07-28 23:47:54 · 81 阅读 · 0 评论 -
ODT 学习笔记
珂朵莉,要一直幸福下去哟!warning:本文在大白天书写,脑子可能不大好用。目前代码选自题解,等有时间自己写一下。简介ODT(Old Driver Tree(中文译名张舟树),又称 Chtholly Tree,即众人皆知的珂朵莉树) 是一种非常暴力的思想或者做法 (注意我没有说是数据结构)简单来说,其核心思想是把一段区间推平(这也是其适用的地方——区间赋值),推平之后,原数列变成一段一段的了(每段的数值相同),然后就可以搞事了。ODT 在随机数据下,复杂度近似 O(mlogn)O(m log原创 2021-07-27 18:11:22 · 821 阅读 · 0 评论