模板—数学—矩阵树定理

模板—数学—矩阵树定理

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));
}

  

posted @ 2019-04-05 09:03  Yang1208  阅读(212)  评论(0编辑  收藏  举报