do_while_true

一言(ヒトコト)

一些经典小结论

图论

平面图中的欧拉定理:设 \(G\) 为任意的连通的平面图,则 \(V-E+F=2\)\(V\)\(G\) 的顶点数,\(E\)\(G\) 的边数,\(F\)\(G\) 的面数。

树上问题

两个点集并起来的直径端点一定在两个点集分别的直径端点这四个点中。证明类似求直径两遍 dfs 做法的证明。

使得点集连通的最小边集大小:按照 dfs 序排序之后相邻两两距离之和 \(\div 2\)(包括头尾)。证明。类似的,点集的 LCA 是 dfn 最小和 dfn 最大的 LCA。

\(a\) 到路径 \(b\to c\) 的距离:\(dis(a,b)+dis(a,c)-dis(b,c)\)

\((a,b)\)\((c,d)\) 树上路径的交。先判断有没有交,如果有的话路径交的端点就是这四个点两两 LCA 深度较深的两个点。判断有无交可以看 \(LCA(a,b)\)\(LCA(c,d)\) 深度较深的那个是否在另一条链上。

要使两点之间 lca 的深度最小,应当尽量让两点的 dfs 序差异尽量大

带边权树,令 \(\text{dis}(x,y)\) 表示 \(x\)\(y\) 路径上的最大边权,\(f(x,S)\) 表示 \(\max_{y\in S}\text{dis}(x,y)\),那么 \(f(x,S\cup T)=\max\{f(x,S),f(x,T),\text{dis}(u,v)\}\),其中 \(u\)\(S\) 中任意一点,\(v\)\(T\) 中任意一点。

Other

对于一个数,每次只有 \(+1\),或者每次只有 \(-1\),暴力进位/借位次数均摊下来是 \(\mathcal{O}(次数)\) 的。证明考虑在第 \(i\) 位进位次数 \(\sum n/2^i=\mathcal{O}(n)\)

对于一个线性基,令 \(f(x)\) 表示用线性基里的元素和 \(x\) 异或出来的最大值(或最小值),结论是 \(f(x\oplus y)=f(x)\oplus f(y)\),证明就是左右两边同时贪心,决策完最高位从而归纳到最高位更低的情况。

集合中元素选出俩数异或和的最小值,支配对是从小到大排序后的相邻元素。也就是 \(a<b<c\)\(a\oplus c>\min(a\oplus b,b\oplus c)\)

posted @ 2022-03-23 21:57  do_while_true  阅读(63)  评论(1编辑  收藏  举报