记
有些东西特别爱忘,所以在这写一下。
EXCRT
首先会了 EXCRT 就可以不用会 CRT 了,感觉 EXCRT 或许好会。
有线性同余方程组:
\[\begin{cases}
x\equiv& a_1\pmod {b_1}\\
x\equiv& a_2\pmod {b_2}\\
&\vdots\\
x\equiv& a_n\pmod {b_n}\\
\end{cases}\]
推导解法。
取出前两个式子,可以表示成:
\[x=k_1b_1+a_1=k_2b_2+a_2
\]
这样移项处理成:
\[b_1k_1-b_2k_2=a_2-a_1
\]
设 \(x_0=k1,y_0=k2\),那么有:
\[b_1x_0-b_2y_0=a_2-a_1
\]
可以 exgcd 解出 \(x_0\),注意是在 \(\dfrac{b_2}{\gcd(b_1,b_2)}\) 意义下的。
之后任意解可以写作 \(x_0+\dfrac{b_2}{\gcd(b_1,b_2)}\times k\)。
代回去:
\[x=b_1x_0+\dfrac{b_1b_2}{\gcd(b_1,b_2)}\times k+a_1
\]
改写后是:
\[x=k\mathrm{lcm}(b_1,b_2)+b_1x_0+a_1
\]
于是合并成了:
\[x\equiv b_1x_0+a_1 \pmod{\mathrm{lcm}(b_1,b_2)}
\]
讲真这个推导过程我学了快两年第一次看。
点击查看代码
inline ll mul(ll A,ll B,ll P){
ll res=0;
while(B){
if(B&1) res=(res+A)%P;
A=(A+A)%P;
B>>=1;
}
return res;
}
ll exgcd(ll A,ll B,ll &X,ll &Y){
if(!B){
X=1,Y=0;
return A;
}
ll D=exgcd(B,A%B,Y,X);
Y-=A/B*X;
return D;
}
int n;
ll a[maxn],b[maxn];
inline void EXCRT(){
ll A=a[1],B=b[1];
for(int i=2;i<=n;++i){
ll X,Y;
ll D=exgcd(B,b[i],X,Y),BD=b[i]/D;
X=(X%BD+BD)%BD;
X=mul(X,((a[i]-A)/D%BD+BD)%BD,BD);
ll tmp=BD*B;
A=(mul(X,B,tmp)+A)%tmp;
B=tmp;
}
printf("%lld\n",A);
}
Stirling 数的恒等式
\[x^n=\sum_{i=0}^n \begin{Bmatrix}n\\i\end{Bmatrix} x^{\underline{i}}
\]
\[x^n=\sum_{i=0}^n (-1)^{n-i}\begin{Bmatrix}n\\i\end{Bmatrix} x^{\overline{i}}
\]
\[x^{\overline{n}}=\sum_{i=0}^n \begin{bmatrix}n\\i\end{bmatrix} x^{i}
\]
\[x^{\underline{n}}=\sum_{i=0}^n (-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix} x^{i}
\]
\[\begin{Bmatrix}n\\m\end{Bmatrix}=\sum_{i=0}^m \dfrac{(-1)^{m-i}i^n}{i!(m-i)!}
\]
\[\begin{Bmatrix}n+1\\m+1\end{Bmatrix}=\sum_{i=m}^n \dbinom{n}{i}\begin{Bmatrix}i\\m\end{Bmatrix}
\]
Hall 定理
对于二分图 \(G\),设左部点 \(V_L\) 的子集 \(T\) 的邻域 \(N_G(T)\),则二分图对左部点存在饱和匹配的充要条件是:
\[\forall T\in V_L,|T|\le |N_G(T)| \]
必要性:显然。
充分性:考虑对点数归纳,分两种情况讨论。
-
若存在 \(T\) 使得 \(|T|=|N_G(T)|\),那么删去 \(T\) 以及 \(N_G(T)\),如果存在一个 \(S\) 使得 \(|S|>|N_{G'}(S)|\),那么 \(|S\cup T|>|N_G(S\cup T)|\),与题设不符。
-
否则对任意 \(T\) 都有 \(|T|<|N_G(T)|\),任选 \((u,v)\) 钦定其匹配,并删去与 \(u,v\) 有关的边,之后仍满足 \(|T|\le |N_G(T)|\),原因是每个点集最多变化 \(1\)。