小结论与某些入门板子整合
主定理
弱智吧合集
在一个 \(n,m\) 同阶的图上,
本质不同子序列:
\(f_i:\) 以 \(a_i\) 结尾且是第一次出现,\(f_i=\sum_{j=\operatorname{lst}_i}^{i-1} f_j\)
\(f_i:\) 前 \(i\) 个数组成,\(f_i=2f_{i-1}-f_{\operatorname{lst}_i-1}(f_0=-1)\)
线性基大小 \(k\),从 \(n\) 个数中选取子集使异或和为 \(x\) 的方案数为 \(2^{n-k}\)。非线性基元素任选,然后从线性基里选的方案唯一。
拿横纵坐标 \(\in[0,n]\) 的整点构造 \(\frac 14\) 凸包,其点数 \(=\mathcal O(n^{\frac 23})\)。
二分图最大匹配 \(n-\max_{S\subseteq L}\{|S|-|N(S)|\}\),\(m-\max_{S\subseteq R}\) 同,证明思路类Hall
\(0/1\) 最大流必需边:满流、残量网络双点非强连通【新型城市化】;最小割可行边:同;最小割必需边:满流、\(u\) 与 \(S\) 以及 \(v\) 与 \(T\) 分别共属一个 SCC。
字符串 \(A,B\):
\(1\sim n\) 中选出 \(k\) 个位置要求两两不相邻(相邻两者必有至少一个被选中同理)方案数:
选出第 \(i\) 个位置 \(p_i\),仅需确认 \(\{p_i-i\}\) 构成集合,要求不可重,值域 \([0,n-k]\)。
一个点双中存在奇环 \(\Longleftrightarrow\) 该点双中任意边都至少在一个奇环之中
SAM
https://www.luogu.com.cn/blog/wangrx/sam-guang-yi-sam-yu-ac-zi-dong-ji-zhi-jian-di-guan-ji
https://www.luogu.com.cn/blog/zyz-2008dph/solution-p3804
一前一后,配合食用
SOSb/p
高维 \(前/后缀(x=0/1) 和/差分(y=0/1)\):令 \(z=x\oplus y\)
for(int i=0;i<n;++i) for(int s=0;s<1<<n;++s)/*z=1则倒序枚举*/ if(/*x=1则判不包含,!*/s&(1<<i)) f[s]+=/*y=1则-=*/f[s^(1<<i)];
玩具装箱
形如 \(f_i=\operatorname{min-max}\{a_ib_j+c_i+d_j\}\)
点集中取 \(kx+y\) 的 \(\operatorname{min-max}\),拿斜率 \(-k\) 切之
玩具装箱单调队列模型需满足 \(a\) 与 \(b\) 均单调。
0/1分数规划
LOJ149
二分 \(ans\),对所有人的 \(a-b\times ans\) 排序后贪心选取最大的 \(k\) 个,如果它们的和 \(>0\) 那么存在比当前 \(ans\) 更大的解,反之亦然。
KTT
https://www.luogu.com.cn/problem/solution/CF436F
https://www.cnblogs.com/joke3579/p/paperessay221202.html#31-
生成函数记忆点
典中典:
付公主的背包:
广义二项式定理:
- EGF可以将组合数消去。
波特·彼阳
边双
没有桥的极大连通子图(\(u\) 到 \(v\) 总有两条路径满足无边交),额外处理孤点
void tar(int now,int lst){
dfn[now]=low[now]=++dfscnt;
stk[++tp]=now;for(int v:vc[now]) if(v!=lst){
if(!dfn[v]){
tar(v,u);low[now]=min(low[now],low[v]);
if(low[v]>dfn[now]){
//(now,v)是桥
++kcnt;do bel[stk[tp]]=kcnt;while(stk[tp--]!=v);
}
}
else low[now]=min(low[now],dfn[v]);
}
}
void tar(int u){//根所在边双特殊处理
tar(u,0);++kcnt;while(tp) bel[stk[tp--]]=kcnt;
}
点双
没有割点的极大连通子图(\(u\) 到 \(v\) 总有两条路径满足除 \(u,v\) 两点外无点交),两点一边算作点双,仅割点属于多个,圆方树圆方相间,额外处理孤点
void tar(int now){
dfn[now]=low[now]=++dfscnt;
stk[++tp]=now;for(int v:vc[now]){
if(!dfn[v]){
tar(v);low[now]=min(low[now],low[v]);
if(low[v]>=dfn[now]){
++kcnt;bel[now].push_back(kcnt);//now为割点
do bel[stk[tp]].push_back(kcnt);while(stk[tp--]!=v);
}
}
else low[now]=min(low[now],dfn[v]);
}
}
仙人掌上树
每个简单环(包括二元环)为点双,两点一边不算点双直接连,方方不相接,每个环抽出一个作为根连向方点,方点连向剩余结点,已经父->子定向,边权具体分析
void tar(int now,int lst){
dfn[now]=low[now]=++dcnt;stk[++tp]=now;
for(auto[v,w]:gp[now]) if(v!=lst){
if(!dfn[v]){
tar(v,now);low[now]=min(low[now],low[v]);
if(low[v]>dfn[now]) vc[now].push_back((ed){v,w});
}
else if(dfn[v]<low[now]){
low[now]=dfn[v];
vc[v].push_back((ed){++fc,0});rt[fc]=v;
for(int t=tp;stk[t]!=v;--t) vc[fc].push_back((ed){stk[t],0});
}
}--tp;
}
强连通分量
void tar(int now){
dfn[now]=low[now]=++dfscnt;
stk[++tp]=now;ist[now]=1;
for(int v:vc[now]){
if(!dfn[v]){
tar(v);low[now]=min(low[now],low[v]);
}
else if(ist[v]) low[now]=min(low[now],dfn[v]);
}
if(dfn[now]==low[now]){
++kcnt;do ist[stk[tp]]=0,bel[stk[tp]]=kcnt;while(stk[tp--]!=now);
}
}
``

浙公网安备 33010602011771号