知识杂项(知识堆砌)

也就是杂杂的记一下

1. 大数翻倍法

用于解决线性同余方程组(中国剩余定理)的一种优化暴力,好写好记,而且正确率高。

暴力做法:对于其中两个同余方程进行合并

wihle (a1%n2!=a2) a1+=n1;
return (a1, lcm(n1,n2));

复杂度好像是一种 \(\sum n_i-\max n_i\) (\(n_i\) 为模数) 的奇怪的东西。

具体做法是将暴力的做法优化了些。

inline node merge(node a, node b)
{
	if (a.m < b.m) swap(a, b);
	//唯一的优化
	while (a.a%b.m != b.a)
		a.a += a.m;
	
	a.m = lcm(a.m, b.m);
	return a;
}

后话:洛谷的CRT模板题,虽然暴力也能水过。但这三者之间的速度差异依然可以由P4777 【模板】扩展中国剩余定理(EXCRT)看出。

image

2. 图中的一些定义(备忘)

最大匹配数:最大匹配的匹配边的数目

最小点覆盖数:选取最少的点,使任意一条边至少有一个端点被选择

最大独立集:选取最多的点,使任意所选两点均不相连

最小路径覆盖数:对于一个 \(\small\text {DAG}\)(有向无环图),选取最少条路径,使得每个顶点属于且仅属于一条路径。路径长可以为 \(0\)(即单个点)。

:选出一些顶点,这些顶点两两之间都有边。最大团就是使得选出的这个顶点集合最大。

关于二分图一些定理:

  1. 最大匹配数 = 最小点覆盖数(König 定理)
  2. 最大独立集 = 点数 - 最大匹配数
  3. 最小路径覆盖数 = 点数 - 最大匹配数
  4. (二分图的补图的)最大团的大小 = 其补图最大独立集的大小

3. 哈希值

\[hash(l,r)=hash(1,r)-hash(1,l-1)\times p^{r-l+1} \]

4. 同余最短路

看似这种 “随意使用 \(n\) 个,可以拼凑(相加)出的数的个数” 或是 “无法拼凑出的最小(最大)的数” 等等,和图论完全不着边际的问题,可以用同余最短路试试看。

最短路有一个 \(dis\) 数组存储最短路长度的数组,然后同余最短路的 \(dis\) 数组的效用是:

  设 \(x\) 为一个被拼凑出来的数,那么 \(dis_{i}\)\(x\)\(p\)\(i\) 的最小被拼凑出来的数。

\(p\) 是给出的 \(n\) 个数中的任意一个数,通常它会是 \(a_{min}\)\(p\) 的选择就代表着这图的点数,所以说小凯的疑惑这种题就算了吧。

然后就有了 \(u\xrightarrow{a_i} u+a_i \bmod p\) 这样的建图方法,边跑边建。

有了 \(dis_i\) 这样的数组,上述问题就有了方法,

  1. 可以拼凑(相加)出的数 \(x\in[l, r]\) 的个数:\(\sum_{i=0}^{p}\frac{(r-dis_i)}{p}+1, \ \ dis_i<=r\)

  2. 无法(可以)拼凑出的最小(最大)的数,很明显 \(dis_i\) 是可以,\(dis_i-p\) 是不可以。

如果解决可以拼凑出的 \(k-th\) 的数,建议看看某一场 AT 的 E

5. 线段树优化建图

由于某些奇奇怪怪的题目要求由一个区间里的点连向其他的点,这样的建边极为的繁琐。

我们可以建一个虚点来表示这个区间的点,就像是这样。

image

但此时,这个虚点又并不和 \([l,r]\) 的点所联系,那么就可以这样。

image

由于这样还是太繁琐了,聪明的人们想到了线段树,就像是这样。(当然你完全可以把两颗线段树的叶子节点建出来,直接的把两个线段树分开,再在叶子节点对应连边)

之后就可以在这颗线段树上进行建边了。

特别提醒:线段树 \(1\) 是一颗代表终点节点区间的树,而线段树 \(2\) 是一颗代表起点节点区间的树。

image

偶尔的区间连区间的问题,让它变为区间连虚点连区间即可。

6. 哥德巴赫猜想

哥德巴赫猜想的现代版本是:

每个大于2的偶数都可以写成两个素数之和。

这里有一个小结论:分成的两个质数中,有一个小质数一定小于 \(n\)

错排问题的递推式

\[d(n)=(n-1)\times\left(d(n-1)+d(n-2)\right) \]

More...

posted @ 2023-02-22 19:27  Ciaxin  阅读(49)  评论(0编辑  收藏  举报