题目链接:http://www.spoj.pl/problems/HIGH/
题意:求最小生成树个数。
思路:模板
#include <iostream>
#include <cstdio>
#include <cstring>
#define int64 long long
using namespace std;
int n,m;
int64 a[15][15],g[15][15];
int64 DET(int64 a[][15],int n)
{
int i,j,k;
int64 temp=1,t;
for(i=1;i<n;i++)
{
for(j=i+1;j<n;j++) while(a[j][i])
{
t=a[i][i]/a[j][i];
for(k=i;k<n;k++)
{
a[i][k]-=a[j][k]*t;
}
for(k=i;k<n;k++)
{
t=a[i][k];
a[i][k]=a[j][k];
a[j][k]=t;
}
temp=-temp;
}
temp=temp*a[i][i];
}
if(temp<0) temp=-temp;
return temp;
}
int C;
int main()
{
for(scanf("%d",&C);C--;)
{
scanf("%d%d",&n,&m);
memset(a,0,sizeof(a));
memset(g,0,sizeof(g));
int i,j,u,v;
while(m--)
{
scanf("%d%d",&u,&v);
u--;v--;
g[u][v]=g[v][u]=1;
}
for(i=0;i<n;i++)
{
u=0;
for(j=0;j<n;j++) if(g[i][j]) u++,a[i][j]=-1;
a[i][i]=u;
}
int64 ans=DET(a,n);
printf("%lld\n",ans);
}
return 0;
}