CSP赛前一周 模板训练

数论

  • 线性筛素数、欧拉函数
  • 质因数分解
  • 最大公约数&最小公倍数
  • 扩展欧几里得算法
  • 线性同余方程+中国剩余定理
  • 矩阵乘法
  • 高斯消元
  • 组合计数
  • 容斥原理
  • 概率&数学期望
  • 0/1分数规划

质因数分解:
N的正约数的和为:
( 1 + p 1 + p 1 2 + p 1 3 + . . . + p 1 c 1 ) ∗ . . . ∗ ( 1 + p m + p m 2 + p m 3 + . . . + p m c m ) (1+p_1+p_1^2+p_1^3+...+p_1^{c_1})*...*(1+p_m+p_m^2+p_m^3+...+p_m^{c_m}) (1+p1+p12+p13+...+p1c1)...(1+pm+pm2+pm3+...+pmcm)

欧拉定理的推论:
许多计数类问题要求我们把答案对一个质数p取模后输出。
面对a+b,a-b,a*b,直接在计算前对p取模
a/b,则直接变化做 a ∗ 1 b a*\frac{1}{b} ab1,对b求逆元
a b a^b ab,则先把底数对p取模,再把指数对 φ ( p ) φ(p) φ(p)取模(前提:gcd(a,p)=1)
**若gcd(a,p)!=1,则 b m o d    φ ( n ) + φ ( n ) b\mod φ(n)+φ(n) bmodφn+φn

存在逆元的条件:
g c d ( x , p ) = = 1 gcd(x,p)==1 gcd(x,p)==1
特别地,当P为质数的时候,x不能是P的倍数
例题SumdivPOJ 1845

异或的性质:
如果a^b^c=e
则有 a=e^b^c
这样用高斯消元解异或方程组的时候就很妙了

组合计数:
常用性质


图论

  • 最短路(Dijkstra,SPFA,Floyd)
  • 最小生成树
  • 树上操作(树的直径、LCA)
  • 基环树
  • 负环+差分约束
  • Tarjan
  • 欧拉路
  • 2-SAT
  • 二分图匹配
  • 网络流

最短路

  1. 最短路计数【√】
  2. 次短路【√】
  3. K短路【√】
  4. 传递闭包【√】
  5. 最小环【√】

无向图の最小环:核心代码

for(re int k=1;k<=n;++k){
		for(re int i=1;i<k;++i)
			for(re int j=i+1;j<k;++j){
				if(ans>dis[i][j]+a[i][k]+a[k][j])
					ans=dis[i][j]+a[i][k]+a[k][j];
			}
		for(re int i=1;i<=n;++i)
			for(re int j=1;j<=n;++j){
				ll tmp=dis[i][k]+dis[k][j];
				if(tmp<dis[i][j]){
					dis[i][j]=tmp;
					pos[i][j]=k;
				}	
			}	
	}

Floyd这个乱搞求最短路!!根本无法求次短路好伐。所以自己yy的那个做法是不可以的,但正确性应该是可以保证的
有向图の最小环:可以枚举起点s,然后求单源最短路径。s一定是最先从堆中取出来的,扫描s的出边进行扩展,然后将 d i s [ s ] = i n f dis[s]=inf dis[s]=inf,继续扩展。当s第二次从堆中取出来的时候,答案就是 d i s [ s ] dis[s] dis[s]
最短路计数:果然不能轻视模板啊!!打挂n次。
第一次发现dij板子打错,粗心忘了标记vis(一般是不会有太大问题的,但是恰恰是计数,问题就很大了)
第二次发现cnt记错了,应该对于每个点都记录一下,而不能所有点的答案累加(oh,such a crazy girl)
第三次发现题目有重边
第四次发现这居然是个有向图(我要死了)
次短路

最小生成树

  1. 最小生成树计数【√】
  2. 次小生成树【√】

可能还需要复习博弈论,分块

你可能感兴趣的:(总结)