【集训】ZR集训——数学

7.29

数论

CRT板子

    //x=a(mod m)
	Int A=0,M=1;
	for(int i=1;i<=n;i++){
		Int x,y;
		Int k=exgcd(M,m[i],x,y);
		if((A-a[i])%k!=0) return -1;
		x*=(A-a[i])/k;
		A-=x*M;
		M=M/k*m[i];
		A=(A%M+M)%M;
	}
	int ans=(A%M+M)%M;
	return ans; 

    //kx=a(mod m)对此方程一次求解
    //kx+my=a
    //g=gcd(k,m)
    //x=a/g*x'+m/g*t即x=a/g*x'(mod m/g)
    //按照第一种情况求解

exgcd证法

线性求逆元组

龟速乘(会不会是快速加[doge]

BSGS

	//a^x=b(mod p)
	//t=sqrt(p)
	//x=i*t-j
	//a^(i*t)=b*a^j(mod p)
	//(a^t)^i=b*a^j(mod p)
	
	//0<=j<t
	int B=sqrtl(p)+1;
	unordered_map<int,int> mp;
	int pw=1;
	for(int i=1;i<=B;i++){
		mp[(b*=a)%=p]=i;
		(pw*=a)%=p;
	}
	int k=1;
	for(int i=1;i<=B;i++){
		if(mp.count((k*=pw)%=p)) return i*B-mp[k];
	}
	return -1;

矩阵

矩阵求逆

模意义高斯消元

线性基

定理:假设 \(n\) 个数的线性基中有 \(k\) 个数,那么显然共有 \(2^k\) 个不同的异或和,而其中每一个异或和的出现次数都是 \(2^{n−k}\)

前缀线性基(时间戳线性基):维护时间点,靠后优先

差分线性基:区间修改转单点修改

可删除线性基:1.线段树分治 2.维护时间点

k进制线性基

ex

仙人掌图

LGV引理:对偶容斥,行列式加速

矩阵树定理

\[QWQ \]

7.30

dp套dp

狄利克雷前缀和

莫比乌斯反演

莫比乌斯函数是常数函数的逆元,即 \(\mu*1=e\)

与狄利克雷前缀和互为逆运算,一个是前缀和,一个是差分

杜教筛(❌️)

min25筛(❌️)

\[QWQ \]

7.31

容斥

min-max容斥

容斥的几种形式

AB统称多步容斥

形式A:经典容斥

求并集或者并集补集

并集由交集表示,也可以被认为一个性质都不满足的方案数

其核心是二项式定理的应用,也可以理解成广义容斥的特殊形式

形式B:广义容斥

求“恰好满足t个性质”

其推导的式子和二项式反演极其相似,诠释了容斥与二项式之间的紧密联系

形式C:对偶容斥

名字是我瞎起的,这类容斥和上面两类容斥没什么关系

其应用于LGV引理的证明中,有一组不合法路径,其方案数相同,我们设计容斥系数使之相互抵消

合法路径不与任何其他路径成对偶

还有一个应用是 min-max容斥(其实我也不太确定)

EX

二项式反演

不定方程非负整数解计数(有上界容斥)

树上容斥dp(加速容斥):P12639

prufer序列

公式

Cayley 公式:有标号⽆根树的数量为 \(n^{n-2}\) ,有标号有根树的数量为 \(n^{n-1}\)

洛⾕P2290 [HNOI2004] 树的计数:指定度数序列为 \(d_1,d_2,d_3..,d_n\) 的⽆根树数量是 \(n-2 \choose {d_1-1,d_2-1,...,d_n-1}\)

图联通方案:⼀张有 \(k\) 个连通块的图,第 \(i\) 个连通块⼤⼩为 \(a_i\) ,求连接 \(k-1\) 条边使得图连通的⽅案数为 \((\sum a_i^{k-2})\Pi a_i\)。(数学推导)

扩展 Cayley 公式:\(n\) 个有标号结点形成 \(s\) 棵树的森林且 \(1,2,...,s\) 不属于同⼀棵树的⽅案数为 \(sn^{n-s-1}\)

树与序的双射构建

P6086

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e6+10;
int f[N];
int p[N];
int n;
int d[N];
void solve1(){
	for(int i=1;i<=n-1;i++){
		cin>>f[i];
		d[f[i]]++;
	}
	for(int i=1,j=1;i<=n-2;i++,j++){
		while(d[j]) j++;p[i]=f[j];
		while(i<=n-2&&!(--d[p[i]])&&p[i]<j) p[i+1]=f[p[i]],i++; 
	}
	int ans=0;
	for(int i=1;i<=n-2;i++) ans^=i*p[i];
	cout<<ans<<"\n";
}
void solve2(){
	for(int i=1;i<=n-2;i++){
		cin>>p[i];
		d[p[i]]++;
	}p[n-1]=n;
	for(int i=1,j=1;i<n;i++,j++){
		while(d[j]) j++;f[j]=p[i];
		while(i<n&&!(--d[p[i]])&&p[i]<j) f[p[i]]=p[i+1],i++;
	}
	int ans=0;
	for(int i=1;i<n;i++) ans^=i*f[i];
	cout<<ans<<"\n";
}
signed main(){
	int m;cin>>n>>m;
	if(m==1) solve1();
	else solve2();
	return 0;
}
//指针维护最小值

矩阵树定理

无向

定义⼀张⽆向图 的 Laplace 矩阵 \(L_G\) 为度数矩阵减去邻接矩阵,那么其⽣成树个数为任意选取⼀个 \(i\)\(L_G\) 去除第 \(i\)\(i\) 列后矩阵的⾏列式。

有向拓展

假设现在给定一个图G.

度数矩阵D:若存在边 \((x,y,z)\) ,则 外向树中 \(D[y][y]+=z\); 内向树中 \(D[x][x]+=z\);

邻接矩阵C:若存在边 \((x,y,z)\) ,则 内向树和外向树中均为 \(C[x][y]+=z\);

图G的基尔霍夫矩阵 \(A = D − C\)

加权拓展

那么矩阵树定理求的就是边权乘积之和,此时点的度数为连边权值和

LGV引理

\[QWQ \]

8.1

期望

线性性

无关不是互斥

做题思想

由于期望dp是倒着做的,所以可能记忆化搜索更符合直觉

  • 根据独立性拆分子问题 CF1097D

  • 转化成二维图像问题,然后拆分成三个子问题,通过数轴变换求解 AT_agc019_f

生成函数

exp是e的泰勒展开

意义

生成函数的意义,是对组合问题进行范式转换,把离散的组合结构翻译成连续的、可分析的代数对象,用整个分析学的武器库去处理组合问题。

其副产品是解递推求通项

运算

生成函数的运算在定义上是形式幂级数的代数运算,可以用封闭形式做四则运算然后转成形式幂级数

形式幂级数乘除法实际上等价于背包和退背包AT_fps_24_g

普通生成函数OGF(无标号)

求斐波那契通项

退背包

指数生成函数EGF(有标号)

FFT(❌️)

nlogn做多项式乘法

NTT是取模的FFT

EX

超集求和(SOS DP) CF482C

S属于T,则dp[S]+=dp[T],从大集合到小集合转移

\[QWQ \]

8.2

博弈论

对称模仿策略AT_abc278_g,AT_agc002_e

配对策略qoj15321

周期优化CF1704F

合作博弈hdu7393

构造方案abc278g

\[QWQ \]

8.3

构造

重在人类思考路径,而非结论

分块构造,折半构造,建图构造(CF1270G)

随机构造,正负构造hdu6804

随机

K-path color coding(hdu6664)

trick

找二元组集合使之r减l为0的trick,即建基环树找环(CF1270G)

posted @ 2026-07-31 18:32  Aistyr  阅读(14)  评论(1)    收藏  举报