随笔分类 - 浅谈
1
摘要:用处 给 $n$ 个 $0/1$ 变量,其之间满足若关系,这些关系本质上可以化成:若 $a_i$ 为 $0/1$,则 $a_j$ 为 $0/1$ 的若干命题,2-SAT 就是判断是否能够满足所有命题,并给出一组可行解($n^2$ 可得字典序最小的特解)。 一般解法 考虑建图,每个变量拆成真假两点,命
阅读全文
摘要:思想 离线,把询问拆成若干个区间,放到线段树上,在线段树上递归处理,进一个区间就执行操作,出一个区间就撤销执行了的操作,需要支持可回退。 题 P5787 二分图 /【模板】线段树分治 以时间为轴建线段树,把所有的边都放到线段树对应的区间里,走到这个区间时就连边,可以使用扩展域并查集判二分图,并查集不
阅读全文
摘要:多项式全家桶(建设中) FFT 用于两个多项式 \(O(nlogn)\) 快速相乘,思想为系数表示法化成点值表示法做乘法再化回系数表示法。 板子:(短但不算快) #include<bits/stdc++.h> using namespace std; const int _=1e7+5; const
阅读全文
摘要:弹道导弹?(LCT)入门 自己看,我认为 WC2022 讲得挺好的。 我的板子 P3690 【模板】动态树(Link Cut Tree) 算是短的了,跑的有点小慢。 #include<bits/stdc++.h> using namespace std; template <class T> inl
阅读全文
摘要:是什么 \(Prufer\) 数列是无根树的一种数列。在组合数学中,\(Prufer\) 数列由有一个对于顶点标过号的树转化来的数列,点数为 \(n\) 的树转化来的 \(Prufer\) 数列长度为 \(n-2\)。 对于一棵确定的无根树,对应着唯一确定的 \(Prufer\) 序列,运用一一对应
阅读全文
摘要:离散期望 我不会连续期望,所以只讲离散期望。 式子 \(p_k\) 为概率,\(x_k\) 为要求期望值的值,\(E(X)\) 为事件 \(X\) 的期望。 \(E(X)=\sum\limits_k p_k\times x_k\) 性质 设 \(X\) 是随机变量,\(C\) 是常数,则 \(E(C
阅读全文
摘要:Luogu P3805 manacher算法 马拉车算法是求最长回文串的算法,其核心在于减少了冗余的重复计算,利用当前已知的数据尽可能的推出之后的数据,从而达到线性的复杂度。 我认为这个算法的核心之处是充分利用了回文串的对称性。 首先是处理回文串的一个小技巧,对于奇偶回文串,我们只需要在相邻的两个字
阅读全文
摘要:如何构建 当运行 $Kruskal$ 算法找到当前一条可加入的边时,设左右端点在并查集中的所属位置和边权分别为 $x,y,val$,在新图上新建一个节点 $T$,并加入 $(T,x),(T,y)$ 两条边(可以直接加有向边,因为新图中的树的根和方向都固定了),并把 $T$ 的点权赋为 $v
阅读全文
摘要:欧拉函数 $φ(i)$ 欧拉函数是 $1\sim n$ 的数中与 $n$ 互质的个数,常写成 phi。 如何筛: void init(){ phi[1]=1; for(int i=2;i<=n;i++){ if(!vis[i]){phi[i]=i-1;prime[++cnt]=i;} for(int
阅读全文
摘要:是什么 是神仙数据结构,可以维护一些持久化的东西,是我们的伟大领袖。 可持久化的意思就是记录每个历史版本,可以根据历史版本做一些操作。 怎么做 如果对于每个版本都开一棵线段树那空间受不了,我们考虑对每个版本产生修改的链开新的节点,打补丁一样附加在原树上。 具体实现因题而异 void insert(i
阅读全文
摘要:套路 恰好和至多的转换 如果要求某些东西恰好有 $k$ 个的时候,有时候会很难算,而求至多有 $k$ 个的时候会很好算。 设 $f_i$ 表示至多有 $k$ 个的方案数,$g_i$ 表示恰好有 $k$ 个的方案数,则有 $$f_k=\sum\limits_{i=0}^k \binom{k}{i}g_
阅读全文
摘要:Luogu P4178 Tree 我觉得淀粉质还是得从这道题讲起。 点分治,是一种处理树上路径问题的工具,我认为其思想还是对于子树分治处理。 这道题要求距离小于等于 \(k\) 的点对数量,考虑怎么淀粉质。因为我们很容易就可以 \(dfs\) 求出子树中的点到根节点的距离,所以我们只用找出任意两条路
阅读全文
摘要:SP1716 GSS3 - Can you answer these queries III 线段树求最大子段和 我们考虑对于每个区间维护四个值:sum、suml、sumr、res,分别存区间和、从左端点开始的最大子段和、从右端点开始的最大子段和、这个区间的最大子段和。 sum 的维护都会,对于 s
阅读全文
摘要:P3376 【模板】网络最大流 首先我们都已经知道了网络的定义和各种各样的东西。 最大流就是从源点到汇点的最多能流的流量,可以类比二分图的最大匹配。考虑怎么来求她。 Dinic算法 建图没话说,一条正弧一条反弧。 void adde(int u,int v,int cap){ edges.pb({u
阅读全文
摘要:当树也拥有了很强的控制欲…… [ZJOI2012] 灾难 支配树顾名思义,就是一棵树,这棵树上的节点的父亲对儿子起支配作用~~(家庭地位)~~,如果父节点没了,儿子节点也没了。 对于这道题,我们可以设生物 \(u\) 对 \(v\) 起支配作用,如果 \(u\) 灭绝了,那么 \(v\) 也会灭绝。
阅读全文
摘要:[NOIP2010 提高组] 关押罪犯 考虑用并查集维护两个监狱里面的情况。首先对于 \([1,n]\) 我们表示为 \(A\) 监狱里面的情况,对于 \([n+1,2n]\) 我们表示为 \(B\) 监狱里面的情况,首先这两个监狱里面的情况是镜像的,因为你不确定也不需要确定哪个人到底去了哪个监狱,
阅读全文
摘要:Luogu P5906 回滚莫队&不删除莫队 看题,考虑用莫队的写法来做。 我们发现,对于当前区间 \([l,r]\),我们进行删除操作时很麻烦,不能直接得到,所以我们考虑用增加替换掉删除操作。 首先对序列分块。 对于要查询的区间在一个块里的,我们可以直接暴力搞出来 int cul(int l,in
阅读全文
摘要:好久没有水一水数据结构了 LOJ 数列分块入门 2 这道题题意很简单,就是要写一个支持区间加法和区间查询小于 \(c^2\) 个数的数据结构。 考虑分块来做,对于区间加法可以直接用 \(lazy\) 标记维护块内和;对于查询,可以考虑对每个块中的按大小排好序后的数列二分找小于 \(c^2\) 的个数
阅读全文
摘要:最短路算法除了一些基础的应用,还有一些奇奇怪怪的食用方法。 Luogu P1396 营救 先从最最最简单的题开始,这题可以利用克鲁斯卡尔最小生成树的思想做,当 \(s\) ,\(t\) 两点在加边过程中连通了,那么此时的边权就是这条路径上最小的最大边权。 但是可以考虑用bfs的解法做此题。我们不妨二
阅读全文
1