考慮構建拉普拉斯矩陣:
\[l(i,j)=\left\
-m(i,j)(i\ne j) \\
deg(i,j)(i=j) \\
\end
\right.
\]在去某一行和列後 \(det(l)\) 即為答案。
證明略(後面有時間會補)。
模板:p4111
行列式即為變換為上三角矩陣後對角線上的乘積,所以高斯消元即可。
但是這道垃圾題模數不是質數,我們通過輾轉相除即可。
複雜度 \(\tilde((nm)^3)\)。
#include using namespace std;
typedef long long ll;
const ll mod = 1e9;
int n, m, num, id[11][11];
char s[11];
ll l[101][101];
int dx[4] = , dy[4] = ;
ll gauss()
swap(l[i], l[j]);
ret = -ret;
}} ret = ret * l[i][i] % mod;
ret = (ret + mod) % mod;
} return ret;
}int main()
} for (int i = 1; i <= n; i++)
} }cout << gauss() << "\n";
return 0;
}
重新定義拉普拉斯矩陣:
\[l(i,j)=\left\
-m(i,j)(i\ne j) \\
out(i)(i=j) \\
\end
\right.
\]重新定義拉普拉斯矩陣:
\[l(i,j)=\left\
-m(i,j)(i\ne j) \\
in(i)(i=j) \\
\end
\right.
\]注意有向圖定根必須去掉根的那行和那列。
學習筆記 矩陣樹定理
因為在臨時抱佛腳,所以是沒有證明的 對於行列式 d 任意第 i 行 列同理 按下式展開的值與行列式值相等 text sum n 1 cdot a cdot m 其中 m 是 a 的余子式。一些閒話 這個可以用來推導 輪狀病毒 一題中的遞推式。構造連通矩陣和度數矩陣。連通矩陣 a 的第 i 行第 j ...
矩陣樹定理
構建基爾霍夫矩陣,基爾霍夫矩陣的任意乙個代數余子式是所有生成樹的邊權積的和,也就是求的是 sum limits t prod limits v e 基爾霍夫矩陣為度數矩陣減去鄰接矩陣 任意去掉一行一列,所得到的矩陣的行列式即為所求 外向樹為入度矩陣減去鄰接矩陣 內向樹出度矩陣減去鄰接矩陣 刪去根所在...
矩陣樹定理
includeusing namespace std const int n 505 const long long mod 1e4 7 long long det long long a n n int n 0 n 1 求行列式的值 long long tmp 1 for int i 0 i n ...