博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ3534】【Luogu P3317】 [SDOI2014]重建 变元矩阵树,高斯消元
阅读量:6283 次
发布时间:2019-06-22

本文共 1818 字,大约阅读时间需要 6 分钟。

,主要想说一下以前没见过的变元矩阵树还有前几个题见到的几个小细节。

邻接矩阵是可以带权值的。求所有生成树边权和的时候我们有一个基尔霍夫矩阵,是度数矩阵减去邻接矩阵。而所谓变元矩阵树实际上就是把度数矩阵和邻接矩阵带权化,也就是度数矩阵变成该点连接的所有边的权值和,邻接矩阵变成边权矩阵,剩下的依然是求一个行列式。变元矩阵树求的是所有可能生成树的边权之积。

值得注意的点:

  • 交换两行,行列式取反。在\(double\)存矩阵的时候可以最后取对角线乘积的绝对值,但如果答案要取膜就需要套上一个辗转相除来解这个矩阵,这时就要在交换行时更新答案,对答案取反处理。

  • 求行列式的时候要随便去掉一行和一列,比如去掉最后一行和最后一列就可以。可以传一个\(n-1\)进去避免写错。

  • 推式子也很重要。矩阵树定理维护的东西是可以转化为一个式子的,有时候要把它抽象出来。

#include 
using namespace std;const int N = 50;const double eps = 1e-8;int n; double k = 1, p[N][N], mat[N][N];double gauss (int n) { double ret = 1; for (int i = 1; i <= n; ++i) { int besti = i; for (int j = i; j <= n; ++j) { if (fabs (mat[besti][i]) < fabs (mat[j][i])) { besti = j; } } if (i != besti) { ret = -ret; swap (mat[i], mat[besti]); } for (int j = i + 1; j <= n; ++j) { if (fabs (mat[j][i]) > eps) { double d = mat[j][i] / mat[i][i]; for (int k = i; k <= n; ++k) { mat[j][k] -= mat[i][k] * d; } } } ret *= mat[i][i]; } return ret;}int main () { cin >> n; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { cin >> p[i][j]; if (i != j) { p[i][j] = max (p[i][j], 0.0 + eps); p[i][j] = min (p[i][j], 1.0 - eps); if (i < j) k *= (1 - p[i][j]); mat[i][j] -= p[i][j] / (1.0 - p[i][j]); } } } for (int i = 1; i <= n; ++i) { double res = 0.0; for (int j = 1; j <= n; ++j) if (i != j) { res -= mat[i][j]; } mat[i][i] = res; }// cout << k << endl;; cout << k * gauss (n - 1) << endl;}

转载于:https://www.cnblogs.com/maomao9173/p/10944375.html

你可能感兴趣的文章
人工智能概念诞生60年,哪些大牛堪称“一代宗师”?
查看>>
《游戏大师Chris Crawford谈互动叙事》一9.5 真实案例
查看>>
Java Cache系列之Guava Cache实现详解
查看>>
设计模式 - 适配器
查看>>
CSS之可折叠导航
查看>>
淘宝美工设计师细说何为天猫透明背景
查看>>
【B/S学习总结】我的第100篇CSDN博客
查看>>
[Hadoop]chukwa与ganglia的区别
查看>>
数据挖掘工具分析北京房价 (一) 数据爬取采集
查看>>
IOS项目之弹出动画终结篇
查看>>
iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)
查看>>
OSS移动开发实战2 (30分钟快速搭建移动应用上传回调服务)
查看>>
Swift语言学习No.2: 二维数组
查看>>
Windows Azure初体验--功能介绍
查看>>
LEA 指令
查看>>
利用工作场所中与千禧一代的代沟
查看>>
WEB 开发防止表单重复提交
查看>>
INI
查看>>
Vuex-安装
查看>>
ipsec ***经常无法ping通处理方法
查看>>