随笔分类 - ☺模板
摘要:gate 有向图求最短路,需要进行三种操作: 点向点连边 点向区间连边 区间向点连边 用线段树优化建图可以解决。 建立两棵线段树,一棵存入边,一棵存出边 入边: 出边: 所以线段树看起来应该是这样子的: 线段树内的边权为$0$。 code #include<cstdio> #include<iost
阅读全文
摘要:对于树上的节点$i$,设$d[i]$为$i$的度数,$fa$为$i$的父亲,$\sum\limits_ j$为$i$的儿子。 假设边权均为$1$。 分别考虑儿子到父亲、父亲到儿子的期望。 设$F[i]$表示儿子$i$到父亲的期望距离。 可以分为$2$种情况: 直接到父亲。 概率为$\dfrac{1}
阅读全文
摘要:gate 线段树合并 设两个要合并的线段树为$a$,\(b\), 若$a$或$b$不存在,则返回另一个。 否则,将$b$的数值累加到$a$上,并返回$a$。 代码如下 int merge(int a,int b,int l,int r) { if(!a) return b; if(!b) retur
阅读全文
摘要:杜教筛用来解决积性函数求前缀和的问题。 复杂度为$O(n^\frac{2}{3})$ 适用情况: 已知函数$f$,求$\sum f$, 存在$f*g=F$,且$g,\sum g,F,\sum F$容易求出。 常用公式: \(\mu*I=[n=1]\) \(\varphi*I=id\) 以求$\sum
阅读全文
摘要:gate \(A*\),有$90pts$的骗分算法。 \(f[i] = g[i] + h[i]\) \(bfs\),节点按$f[i]$排序; $g[i]$即为当前距离,$h[i]$为该点到终点$t$的最短距离。 首先建反向边,求出$t$到每个点的最短距离$h[i]$。 \(bfs\),对于每个结构体
阅读全文
摘要:单源最短路 \(Dijkstra\) 堆优化,用距离最小的点更新其他节点。 不能处理有负权边的图。 \(O(mlogn)\) void dijkstra(int s) { priority_queue <pair<int,int>,vector<pair<int,int> >,greater<pai
阅读全文
摘要:gate 差分约束系统用来解决: 给出$n$个变量$x_1...x_n$,$m$个形如$x_i-x_j \le k$($k$为任意常量)的式子, 求$x_1...x_n$的一组可行解。 将式子变形为$x_i\le x_j + k$,发现刚好符合三角形不等式$dis[v]\le dis[u]+w[i]
阅读全文
摘要:gate 用时:60min? 迭代加深搜索\((IDDFS)\):有深度上限的$DFS$。 当搜索深度$>MaxDeep$时就返回。若这次没有找到,则$MaxDeep+1$。 时间上,会比$BFS$慢一点,因为每次会重复搜索前面一层; 空间上,等于$DFS$的空间,远小于$BFS$。 剪枝优化$(I
阅读全文
摘要:gate 第一次在$Leetcode$做题... 对于每个哈希值建一个链表(链式前向星) 以插入为例,设值为$key$,$key$的哈希值为$x$ 检查$x$的链表中,是否存在值为$key$的。 若不存在,\(num[++cnt] = key\),连边$head[x]\rightarrow cnt$
阅读全文
摘要:gate 对于每一位$s[i]$ \(ans = (ans*base + (ull)s[i])\%mod + prime\) 建议数值 $base = 131\ prime = 233317\ mod1 = 19260817\ mod2 = 20031101$ 双哈希 #include<cstdio
阅读全文
摘要:gate 用时:写代码20min,debug+调emacs+卡常60min 因为就是想找个0/1分数规划题,直接标签搜索的,所以没有思考时间... 做2019各省省选的时候看到某个ac自动机+dp+0/1分数规划,想起来好像还没写过0/1分数规划...找个模板写一下。 $0/1$分数规划 有若干个元
阅读全文
摘要:随便整理下,其实我也不是很懂 ##整除分块 \(\lfloor \frac{n}{i} \rfloor \leq \frac{n}{i} \implies i \leq \lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor\) 即$\lfloor
阅读全文
摘要:"gate" 二维凸包是指覆盖平面上$n$个点的最小的凸多边形。 $Andrew$算法 是一种求凸包的常用算法,它的时间复杂度是$O(nlogn)$ 算法流程 1. 以x为第一关键字,y为第二关键字排序。 2. 从1号点(最左下的一点)开始遍历, 若当前点在栈顶两个元素在直线的左边则入栈, 否则若在
阅读全文
摘要:gate 这是一道虚树的模板题。首先来介绍一下什么是虚树。 虚树,顾名思义,是一棵原本不存在的树。 虚树DP的标志是:一棵$n$个点的树,给出$k$个关键点(\(\sum k<\frac{n}{2}\)),求使这些点互不连通的最小代价。 可以发现,答案只与这些点和他们的$LCA$有关。 所以,可以通
阅读全文
摘要:震惊!某OIer竟使用$O(n^2)$筛法长达1年! 原来筛欧拉函数是和筛素数差不多的,一个埃氏筛法,一个线性筛... 要实现线性筛,必须先明确欧拉函数的以下性质: 设$p$为素数,则有 $\varphi(p) = p 1$ $如果i与p互质, 那么 \varphi(i p) = \varphi(i
阅读全文
摘要:"$gate$" $\color{ A4A4A4}{谢谢好哥哥帮我写的markdown,哭了}$ $exkmp$,也称$z−algorithm$ 是用来求一个字符串的每个后缀与原串的LCP,即字符串中后缀=前缀的长度。 表示以第i位为开头的后缀与前缀相等的最大长度。 例如字符串 ,可求出它的z函数为
阅读全文
摘要:gate 好像没发过manacher的板子,反正有现成的 简单介绍一下: manacher是用来求回文串的算法,它最后可以得到一个数组r[i],表示以i为中心的最长回文串半径为r[i]。 但是,回文串可能会有abba、abcba两种形式,当长度为偶数时,不好确定中心点。 所以,在字符间加入特殊符号,
阅读全文
摘要:gate 我回来了... 本来是应该12月发的blog,没想到拖到了现在,注意事项什么的稍微有点忘了,以后再慢慢补充吧 点分治是一种树上算法。顾名思义,就是对每个点进行分治,计算它的子树对答案的贡献。 主要用于处理树上路径,且一个点会被统计多次的问题。 以这道题为例: 询问树上距离为k的点对是否存在
阅读全文
摘要:gate 保证有欧拉回路,输出路径 这道题的话是字典序,实现的时候从1到n枚举就好了,先不管它qwq 找到度数为奇数的的点作为起点(没有的话就任意一个), dfs,回溯时把点压进栈。 为什么不能遍跑dfs边压?考虑这张图: 边跑边压的结果是1,2,3,2,4,5,而正解(回溯)是1,2,4,5,2,
阅读全文
摘要:gate 二维树状数组,区间修改,区间查询 对于区间$(x,y)$,用差分数组来维护,每次从$(1,1)$加到$(i,j)$ 可以发现,$t[1][1]$被加了$x*y$次,$t[1][2]$被加了$(x-1)*y$次… 那么区间$(x,y)$的和即为 $∑i=(1,x)∑j=(1,y)$ $t[i
阅读全文

浙公网安备 33010602011771号