一道生成树计数模板题
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
const int N=15;
ll b[N][N];
ll det(int n)
{
ll ret=1;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
while(b[j][i])
{
ll t=b[i][i]/b[j][i];
for(int k=i;k<n;k++)
b[i][k]-=t*b[j][k];
swap(b[i],b[j]);
}
ret=-ret;
}
ret*=b[i][i];
}
return abs(ret);
}
int main()
{
int T;
int n,m;
int u,v;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(b,0,sizeof(b));
for(int i=0;i<m;i++)
{
scanf("%d%d",&u,&v);
u--;v--;
b[u][u]++;b[v][v]++;
b[u][v]=b[v][u]=-1;
}
ll ans=det(n-1);
printf("%lld\n",ans);
}
return 0;
}