【欧拉路径】【矩阵树】笔记

约定

  • 在下文中,索引从 \(1\) 开始。

存在欧拉路径的判断

无论是有向图还是无向图,仅考虑起点、终点和其他节点的度数即可。

找到欧拉路径

若判定存在欧拉路径,从起点开始 dfs,边的出栈序即为所求。需要当前弧优化,能做到 \(O(m)\)\(m\) 为边数)。

最小化字典序

直接将边排序,贪心 dfs 即可。

欧拉路径的应用

边定向问题

问题:给定 \(m\) 个二元组构成的组 \(E=((u_1,v_1),(u_2,v_2),\dots,(u_m,v_m))\),你需要将所有二元组重排序,并将组 \(E\) 重排序,使得 \(\forall i\),满足 \(E[i][2]=E[i+1][1]\)

解说:这就是寻找欧拉路径。

双重平均分配问题

问题:给定大小为 \(n\times m\) 的数组 \(S\),且 \(\forall i,j\),有 \(S[i][j]\in\mathbb{N}\)。你需要构造一个 \(n\times m\)非负整数数组 \(A\),满足

  1. \(\forall i,j\),满足 \(A[i][j]\leq S[i][j]\).
  2. \(\forall i\),满足 \(\displaystyle \sum_{j=1}^m A[i][j]=\frac{1}{2}\sum_{j=1}^m S[i][j]\).
  3. \(\forall j\),满足 \(\displaystyle \sum_{i=1}^n A[i][j]=\frac{1}{2}\sum_{i=1}^n S[i][j]\).

若不存在构造,需报告无解。

解说:建无向图 \(G\),建立点集 \(\{x_1,x_2,\dots,x_n,y_1,y_2\dots,y_m\}\)\(\forall i,j\),连接 \(S[i][j]\)无向重边 \(x_i\leftrightarrow y_j\)。若 \(G\) 存在欧拉回路,则有解。设欧拉回路为 \(P\),则 \(A[i][j]\) 可构造为 \(P\) 中边 \(x_i\to y_j\) 的条数。时间复杂度 \(O(n+m+\sum S[i][j])\)

例题P9731 [CEOI 2023] Balance - 洛谷

行列式求值

有的时候,直接 \(O(n^3)\) 正常消元即可。

任意模数行列式求值

需要使用辗转相除来实现消元。时间复杂度 \(O(n^2\log V+n^3)\)

P7112 【模板】行列式求值 - 洛谷

矩阵树定理(无证明)

无向图生成树计数\((\)度数矩阵 \(-\) 邻接矩阵\()\) 的任意余子式。

有向图内向生成树计数\((\)出度矩阵 \(-\) 邻接矩阵\()\) 的根余子式。

有向图外向生成树计数\((\)入度矩阵 \(-\) 邻接矩阵\()\) 的根余子式。

BEST 定理

对于有向欧拉图 \(G=(V,E)\),欧拉回路数量为(回路无起点,边有标号)

\[\boxed{T[S]\times\prod_{u\in V} (\text{deg[u]}-1)!} \]

其中 \(\text{deg}[u]\) 为节点 \(u\) 的出度(也是入读),\(T[S]\) 表示以 \(S\) 为根的内向生成树数量。

证明可以考虑构造欧拉路和内向生成树的双射,让内向生成树的边成为关于该节点最后一条边。

这可以得到,\(\forall u,v\),有 \(T[u]=T[v]\)

例题P10101 [ROIR 2023] 一个普通的字符串问题 (Day 2) - 洛谷

D - C4

posted @ 2025-02-22 15:57  zhiyin123123  阅读(41)  评论(0)    收藏  举报
目录侧边栏

qwq