08年周冬的《生成树的计数及其应用》
//生成树的计数
LL C[N][N];//Kirchhoff矩阵
//对每条边无向边x,y
//a[x][x]++; a[y][y]++;
//a[x][y]--; a[y][x]--;
LL Det(LL a[][N],int n)//生成树计数:Matrix-Tree定理
{
LL ret=1;
for(int i=1; i<n; i++)
{
for(int j=i+1; j<n; j++)
while(a[j][i])
{
LL t=a[i][i]/a[j][i];
for(int k=i; k<n; k++)
a[i][k]=(a[i][k]-a[j][k]*t);
for(int k=i; k<n; k++)
swap(a[i][k],a[j][k]);
ret=-ret;
}
if(a[i][i]==0)return 0;
ret=ret*a[i][i];
}
if(ret<0) ret=-ret;
return ret;
}