[Integration] matrix tree theorem template and matrix theorem Template
Tree theorem survival tree counting template.
Original question: SPOJhighways
Code is long and ugly...
# Include <iostream> # include <cstdio> # include <cstring> # include <cmath> # include <algorithm> # define MAXN 20 # define eps 1e-9using namespace std; int A [MAXN] [MAXN], D [MAXN] [MAXN]; // A is the adjacent matrix D is the degree matrix double C [MAXN] [MAXN]; // kikhoff matrix int T, n, m; void in (int & x) {x = 0; char ch = getchar (); while (! (Ch> = '0' & ch <= '9') ch = getchar (); while (ch> = '0' & ch <= '9 ') x = x * 10 + ch-'0', ch = getchar ();} void gauss () {int now = 1; for (int I = 1; I <= n; I ++) {int x = now; while (fabs (C [x] [now]) <eps & x <= n) x ++; if (x = n + 1) {puts ("0"); return ;}for (int j = 1; j <= n; j ++) swap (C [now] [j], C [x] [j]); for (int j = now + 1; j <= n; j ++) {double temp = C [j] [now]/C [now] [now]; for (int k = 1; k <= n; k ++) C [j] [k]-= temp * C [now] [k];} now ++;} double ans = 1; for (int I = 1; I <= n; I ++) ans * = C [I] [I]; ans = fabs (ans); printf ("%. 0lf \ n ", ans);} int main () {in (T); while (T --) {memset (A, 0, sizeof ()); memset (D, 0, sizeof (D); in (n); in (m); n --; for (int I = 1; I <= m; I ++) {int u, v; in (u); in (v); D [u] [u] ++; D [v] [v] ++; A [u] [v] ++; A [v] [u] ++;} for (int I = 1; I <= n; I ++) for (int j = 1; j <= n; j ++) C [I] [j] = D [I] [j]-A [I] [j]; gauss ();}}
Copyright Disclaimer: This article is an original article by the blogger and cannot be reproduced without the permission of the blogger.