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\) 分为一组。(这样可以让任意两个点都有一次被分在两个不同的组里)

posted @ 2025-07-18 19:42  Optimist_Skm  阅读(4)  评论(0)    收藏  举报