为了学一个矩阵树定理 从行列式开始学(就当提前学线代了。。
矩阵数定理:
截图来自于上述论文
裸题。
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int N=20; 8 const double eps=1e-9; 9 double G[N][N];10 11 double myabs(double x){ return x>0 ? x:-x;}12 13 double guass(int n)14 {15 double ans=1;16 for(int i=1;i<=n;i++)17 {18 int r=i;19 for(int j=i+1;j<=n;j++)20 if(myabs(G[j][i])>myabs(G[r][i])) r=j;21 if(r!=i) 22 {23 for(int j=1;j<=n;j++) swap(G[i][j],G[r][j]);24 ans*=-1;25 }26 if(G[i][i]==0) return 0;//一开始忘了判断,WA了好几发27 for(int j=i+1;j<=n;j++)//row28 {29 for(int k=n;k>=i;k--)//col30 G[j][k]-=G[j][i]/G[i][i]*G[i][k];31 }32 }33 34 for(int i=1;i<=n;i++) ans*=G[i][i];35 return myabs(ans);36 }37 38 int main()39 {40 //freopen("a.in","r",stdin);41 int T;42 scanf("%d",&T);43 while(T--)44 {45 int n,m;46 scanf("%d%d",&n,&m);47 memset(G,0,sizeof(G));48 for(int i=1;i<=m;i++)49 {50 int x,y;51 scanf("%d%d",&x,&y);52 G[x][x]++;G[y][y]++;53 G[x][y]=-1;G[y][x]=-1;//不是--,而是直接等于-154 }55 printf("%.0lf\n",guass(n-1));56 }57 return 0;58 }