矩阵树定理学习笔记

模板

[SPOJ 104] HIGH-Highways

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int T, n, m;
long long A[110][110];

int main(){
    int x, y;
    scanf("%d", &T);
    while(T--){
        memset(A, 0, sizeof(A));
        scanf("%d%d", &n, &m);
        while(m--){
            scanf("%d%d", &x, &y);
            A[x][y]--, A[y][x]--;
            A[x][x]++, A[y][y]++;
            }
        n--;
        long long ans=1;
        for(int i=1; i<=n; i++){
            for(int j=i+1; j<=n; j++)
                while(A[j][i]){
                    long long tmp=A[i][i]/A[j][i];
                    for(int k=i; k<=n; k++)
                        A[i][k]-=tmp*A[j][k], swap(A[i][k], A[j][k]);
                    ans=-ans;
                }
            ans*=A[i][i];
        }
        printf("%lld\n", ans>0 ? ans : -ans);
    }
    return 0;
}

发表评论

邮箱地址不会被公开。 必填项已用*标注