7.18
-
求欧拉回路:
void dfs(int x) { for(int &i = hd[x]; i < e[x].size(); ) dfs(e[x][i++]); stc[++top] = x; } -
用 \(Floyd\) 求 有向图 的最小环:
将 \(f_{i,i}\) 设置成 \(+\infty\),然后跑一遍 \(Floyd\)。 -
用 \(Floyd\) 求 无向图 的最小环:
在更新 \(f_{i,j}\) 前用 \(ans\) 记录 \(\min (f_{i,j}+a_{i,k}+a{k,j})\) -
\(Bellman\ Ford\)
利用三角不等式不断更新 \(dis\)。 -
最小生成树:
\(kruskal\): 稀疏图
\(prim\): 稠密图 -
当给每一个点随机一个父亲,那么生成的这个树的期望高度是 \(log_n\)。
当在所有树的形态中随机一个形态,那么生成的这个树的期望高度是 \(\sqrt{n}\)。 -
小 \(trick\):分层图。[JLOI2011] 飞行路线
-
当树上两条路径香蕉时,其中的某一条的 \(LCA\) 一定在另一条路径上。
-
\(O(1)\ lca\): 用 \(st\) 表维护欧拉序中的深度最小值,考虑点 \(u,v\) 的 \(lca\) 就是 \(min_{dep} \in [first_u, first_v]\)。
-
经典 \(trick\):删边变加边。(多适用于生成树问题)[yLCPC2024] F. PANDORA PARADOXXX
-
\(trick\):建立超级源点。
-
\(trick\):二进制分组,枚举二进制中的每一位,将 \(0\) 分为一组, \(1\) 分为一组。(这样可以让任意两个点都有一次被分在两个不同的组里)

浙公网安备 33010602011771号