Loading

矩阵树定理学习笔记

模版:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=100+10;
const ll inf=1e10;
const int maxm=5e5+10;
const ld eps=1e-12;
int t,n,m;
struct matrix{
    ll ma[maxn][maxn];
    void pre(){memset(ma,0,sizeof(ma));}
}du;
void gauss(){
    n--;
    ll ans=1;
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            while(du.ma[j][i]){
                ll tmp=du.ma[i][i]/du.ma[j][i];
                for(int k=i;k<=n;k++) du.ma[i][k]-=tmp*du.ma[j][k],swap(du.ma[i][k],du.ma[j][k]);
                ans=-ans;
            }
        }
        ans*=du.ma[i][i];
    }
    cout<<abs(ans)<<endl;
}
signed main(){
    cin>>t;
    while(t--){
        cin>>n>>m;
        du.pre();
        for(int i=1;i<=m;i++){
            int a1,a2;cin>>a1>>a2;
            du.ma[a1][a1]++;du.ma[a2][a2]++;
            du.ma[a1][a2]--;du.ma[a2][a1]--;
        }
        gauss();
    }
    return 0;
}
  • 模版不是double类型的矩阵,精度可能有问题。
  • long double版的会神秘地wa掉。
posted @ 2021-07-18 15:42  14long  阅读(7)  评论(0)    收藏  举报