辗转相减法求高斯消元

\(O(n^3 \log n)\)

int n;
int a[N][N];

int Guess()
{
	int ans=1,w=1;
	for(int i=2;i<=n;i++)
	for(int j=i+1;j<=n;j++)
	{
		while(a[i][i])
		{
			int nw=a[j][i]/a[i][i];
			for(int k=i;k<=n;k++) a[j][k]-=nw*a[i][k];
			swap(a[i],a[j]);
		}
		swap(a[i],a[j]);
	}
}

应用:Martix Tree 求生成树个数。

int n;
int a[15][15];

int Guess()
{
	int ans=1,w=1;
	for(int i=2;i<=n;i++)
	for(int j=i+1;j<=n;j++)
	{
		while(a[i][i])
		{
			int nw=a[j][i]/a[i][i];
			for(int k=i;k<=n;k++) a[j][k]-=nw*a[i][k];
			swap(a[i],a[j]);
			w=-w;
		}
		swap(a[i],a[j]);
		w=-w;
	}
	for(int i=2;i<=n;i++) ans*=a[i][i];
	return ans*w;
}
posted @ 2025-11-17 08:49  Wy_x  阅读(15)  评论(0)    收藏  举报