模板—数学—矩阵树定理
模板—数学—矩阵树定理
Code:
#include <cstdio> #include <algorithm> using namespace std; #define N 1010 #define mod 1000000000 long long ans,squ[N][N];int n,m; long long calc(int n) { long long tmp=1; for(int i=1;i<n;i++) { int j; for(j=i;j<n;j++) if(squ[j][i]) break; if(j==n) continue; if(j!=i) {for(int k=i;k<n;k++) swap(squ[i][k],squ[j][k]);tmp*=-1;} for(j=i+1;j<n;j++) { while(squ[j][i]) { long long t=squ[j][i]/squ[i][i]; for(int k=i;k<n;k++) squ[j][k]=(squ[j][k]-squ[i][k]*t%mod+mod)%mod; if(!squ[j][i]) break; for(int k=i;k<n;k++) swap(squ[i][k],squ[j][k]); tmp*=-1; } } } for(int i=1;i<n;i++) (tmp*=squ[i][i])%=mod; return tmp; } int main() { scanf("%d%d",&n,&m); for(int i=1,x,y;i<=m;i++) scanf("%d%d",&x,&y),squ[x][x]++,squ[y][y]++,squ[x][y]--,squ[y][x]--; printf("%lld\n",calc(n)); }