这是本文档旧的修订版!
给定 $n$ 个点,$m$ 条边组成的仙人掌图,求其邻接矩阵的行列式的值。
根据行列式的定义 $\sum_{p \in P(N)}{(-1)^{inv(p)}(\prod_{i=1}^{n}{A_{i, p_i}})}$,根据行列式的定义在 $1\sim n$ 行中各取一个点,其编号构成一个长度为 $n$ 的排列,其中会形成多个环。
设一个环的长度为 $L$,由于邻接矩阵对称,长度大于 $2$ 的环可以有顺时针、逆时针两种顺序,在计算是一起统计答案,其对答案的贡献为
$$
S=
\begin{cases}
2 & n\&1 = 1 \\
-2 & n\& 1= 0\ \&\&\ n\ne2\\
-1 & n=2\\
\end{cases}
$$
$n=2$ 时显然为 $-1$,考虑 $n>2$ 的情况,对于任意一个行列式,同时交换 $i,j$ 行和 $i,j$ 列行列式值不变,于是可将环 $v_1,v_2,\cdots,v_L,v_1$ 变换为 $1,2,\cdots,L,1$,此时逆序对数为 $L-1$,则环的贡献为 $(-1)^{L-1} * 2$。
将仙人掌图转化为圆方树,对于圆点,设 $dp[i][0/1]$ 表示是/否当前该点的答案,对于方点,设 $dp[i][0/1]$ 表示是/否当前该点的父亲的答案。
时间复杂度 $O(n)$