zoukankan      html  css  js  c++  java
  • 行列式与霍尔基夫矩阵

    好的博客

    先打好基础,我们定义一个行列式

    这样就是一个n阶行列式.

    之后就是行列式的计算方法,先水一波二阶行列式的计算方法.

    无脑记就行了.

    余子式:就是去掉某一行某一列构成的行列式.

    代数余子式,前面加个(-1)^(i+j)即可.

    之后就是展开定理

    k表示任一行.A表示代数余子式...

    这里用几个例子(娱乐)来说明一下(表白专用):

    嗯,展开定理大概知道了,就来看看今天的主题吧:

    http://www.lydsy.com/JudgeOnline/problem.php?id=1002

    这个鬼畜的题,该开始用组合数学往死里推,到最后一交全wrong.....究其原因,没办法合理的统计不合法的方案数.毕竟还和容斥有关...

    正解是用霍尔基夫矩阵解生成树的个数...

    生成树计数一般都由霍尔基夫矩阵求解。求解相对广泛,一般均可求无向图的生成树的个数.

    对于一个无向图我们定义它的霍尔基夫矩阵  定义为:  L=D-A 

    其中:D矩阵叫做【度矩阵】;A矩阵叫做【邻接矩阵】

    这里定义就不详细解释了(D矩阵就是一个点的度数.注意只有i==j时才有值.A矩阵当u,v存在边时,才有值为1)

    基尔霍夫矩阵矩阵树定理:基尔霍夫矩阵C的任意余子式Mij的行列式的值就是图G的生成树个数。

    嗯,不要问为什么,记住就行....

    之后我们的任务就是如何高出来一个行列式的值.

    证明略....(原谅我的偷懒....证明太繁琐了...)

    嗯递推式:f[n]=3*f[n-1]-f[n-2]+2.最后写上高精就行了..

    强烈建议这个博客:好的博客

  • 相关阅读:
    Search Insert Position
    lintcode: 最长连续序列
    lintcode:颜色分类
    lintcode: 堆化
    lintcode: 旋转图像
    lintcode: 寻找旋转排序数组中的最小值
    lintcode: 跳跃游戏 II
    lintcode:最小差
    华为:数独填充
    华为:字符集合
  • 原文地址:https://www.cnblogs.com/gcfer/p/12775621.html
Copyright © 2011-2022 走看看