外向树需要把度数矩阵改成入度
因为取模,高斯消元要在整数下进行
有一种辗转相除消元法,可以不用求逆元,而且非常好写,复杂度
最后求代数余子式的时候去掉的应该是根的那一行和那一列
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=310,M=1000000007;
ll a[N][N],n;
char g[N];
int main(){
cin>>n;
for(int i=1;i<=n;++i){
scanf("%s",g+1);
for(int j=1;j<=n;++j)
if(g[j]=='1')a[i][j]--,a[j][j]++;
}
ll ans=1;
for(int i=2;i<=n;++i)
for(int j=i+1;j<=n;++j)
while(a[j][i]){
int t=a[i][i]/a[j][i];
for(int k=i;k<=n;++k)a[i][k]=(a[i][k]-1ll*a[j][k]*t%M+M)%M,swap(a[i][k],a[j][k]);
ans*=-1;
}
for(int i=2;i<=n;++i)ans=ans*a[i][i]%M;
printf("%d\n",(ans+M)%M);
}