首页 > 其他分享 >矩阵树定理求所有生成树的边权和

矩阵树定理求所有生成树的边权和

时间:2024-04-08 15:46:58浏览次数:26  
标签:return int 边权 矩阵 Poly 定理 ans ll MOD

把一条边 \(w\) 写成 \(wx+1\),则生成树边权积的一次项就是答案。

求逆: \((ax+b)^{-1}\equiv(-\frac{a}{b^2}x+\frac{1}{b}) \pmod {x^2}\)

Code
using ll = long long;
const int N = 31;
const int MOD = 998244353;
struct Poly {
	ll a, b;
	Poly(ll a = 0, ll b = 0) : a(a), b(b) {}
} a[N][N];
ll Pow(ll a, int p = MOD - 2) {
	ll ans = 1;
	for(; p; p >>=1, a = a * a % MOD)
		if(p & 1) ans = ans * a % MOD;
	return ans;
}
Poly operator+ (Poly x, Poly y) {
	return Poly((x.a + y.a) % MOD, (x.b + y.b) % MOD);
}
Poly operator- (Poly x, Poly y) {
	return Poly((x.a + MOD - y.a) % MOD, (x.b + MOD - y.b) % MOD);
}
Poly operator* (Poly x, Poly y) {
	return Poly((x.a * y.b + x.b * y.a) % MOD, x.b * y.b % MOD);
}
Poly Inv(Poly x) {
	ll tmp = Pow(x.b);
	return Poly(MOD - x.a * tmp % MOD * tmp % MOD, tmp);
}
ll Det() {
	Poly ans = Poly(0, 1);
	for(int i = 1; i < n; ++i) {
		int pos = 0;
		for(int j = i; j <= n; ++j) if(a[j][i].b) {
			pos = j; break;
		}
		if(!pos) return 0;
		if(i != pos) ans = ans * -1, swap(a[i], a[pos]);
		for(int j = i + 1; j < n; ++j) {
			Poly tmp = a[j][i] * Inv(a[i][i]);
			for(int k = 1; k < n; ++k) a[j][k] = a[j][k] - a[i][k] * tmp;
		}
	}
	for(int i = 1; i < n; ++i) ans = ans * a[i][i];
	return ans.a;
}
void Add(int u, int v, int w) {
	Poly t(w, 1);
	a[u][u] = a[u][u] + t;
	a[v][v] = a[v][v] + t;
	a[u][v] = a[u][v] - t;
	a[v][u] = a[v][u] - t;
}

标签:return,int,边权,矩阵,Poly,定理,ans,ll,MOD
From: https://www.cnblogs.com/Aria-Math/p/18121329

相关文章

  • Proteus8.0仿真应用设计(二十六)基于FreeRTOS、STM32F103C8、HAL库、4x4矩阵键盘应用设
    一、仿真原理图:二、部分代码:        按键采集uint8_tKeyScan(void){ uint8_tvalue=0x00; KeyPort->ODR=0x00; KeyPort->ODR=0xf7; if((KeyPort->IDR&0xf0)!=0xf0) { HAL_Delay(50); if((KeyPort->IDR&0xf0)!=0xf0) { value=......
  • MCA Trader打造低利息,稳定理想交易平台
    在当今金融市场的快速发展中,投资者们对交易平台和服务的要求日益提高。他们渴望找到一个既安全稳定又高效便捷的交易平台,以帮助他们实现投资目标。在这样的背景下,MCATrader应运而生,以其独特的优势和服务理念,成为了公众投资者的理想选择。MCATrader作为一个专门服务于公众投......
  • 第四个OpenGL程序,vector 向量 (矩阵变换之 旋转,缩放)后续 绘制多个 图形
    效果: 代码main.cpp#include<iostream>#include<glad/glad.h>#include<glfw3.h>#include"Shader.h"#defineSTB_IMAGE_IMPLEMENTATION#include<stb_image.h>#include<glm/glm.hpp>#include<glm/gtc/matrix_transfo......
  • 螺旋矩阵(蓝桥杯-Python)
    importosimportsys#请在此输入您的代码n,m=input().split()n=int(n)m=int(m)arr=[[0forjinrange(m)]foriinrange(n)]r,c=input().split()r=int(r)c=int(c)defdo_l():globaln,m,r,c,arr#四个方向#右下左上......
  • 鞅与停时定理小记
    赌博问题设\(X_i\)为第\(i\)轮赌博后的收益。根据常识,显然有\(E(X_i)=X_0=0\)离散时间鞅定义一组离散时间鞅为时间离散的随机过程\(\{X_0,X_1,X_2,...\}\),满足对于任意\(n\),都有\(|E(X_n)|<+\infty\),即取值是有限的。\(E(X_{n+1}-X_n|X_0,X_1,...,X_n)=0\),意思......
  • 基于EP4CE6F17C8的FPGA矩阵键盘实例
    一、电路模块1、数码管开发板板载了6个数码管,全部为共阳型,原理图如下图所示,段码端引脚为DIG[0]~DIG[7]共8位(包含小数点),位选端引脚为SEL[0]~SEL[5]共6位。端口均为低电平有效。其实物图如下所示。数码管引脚分配见下表。2、时钟晶振开发板板载了一个50MHz的有源晶振,为系统......
  • 信息系统规划工具中的各种矩阵
    信息系统规划是企业信息战略规划,关注如何通过信息系统来支撑业务,实现关键业务目标。重点在于对信息系统的远景、组成架构、各部分逻辑关系进行规划。信息系统规划的工具很多,各种矩阵、图等,列如P/O矩阵、R/D矩阵、C/U矩阵、IPO图,等等,不容易分清,每种工具的用途也有所不同。一、P/O矩......
  • python_列表推导式_矩阵运算
    带条件的列表推导式even_number=[iforiinrange(10)ifi%2==0]even_number#output[0,2,4,6,8][0,2,4,6,8]列表推导式的嵌套matrix=[[i*jforiinrange(1,4)]forjinrange(1,4)]matrix#output=[[1,2,3],[2,4,6],[3,6,9]][[1,......
  • SciTech-Mathmatics-Advanced Algebra-LinearAlgebra: 矩阵的相抵、相似与合同
    https://www.math.pku.edu.cn/teachers/baozq/algebra/alg1.htm矩阵的相抵、相似与合同基本概念:相抵,相抵标准形相似,对角化,迹,可对角化矩阵的相似标准形特征值,特征向量,特征多项式,特征子空间正交矩阵,Kn的内积,标准正交基实对称矩阵的正交相似标准形二次型......
  • 矩阵乘法学习笔记
    可以用来加速dp,解决值域大的问题。$\text{Examples:}$P1962斐波那契数列和某个入门题很像,但值域扩大到了$[1,2^{63})$,当然不能暴力求解,考虑把$f_{n}$和$f_{n-1}$当成向量写在一起:\(\begin{bmatrix}f_{n}\\f_{n-1}\end{bmatrix}\),然后找出使下列等式......