生成数计数
对于一个无向简单图, n n n个点和 n − 1 n-1 n−1条边构成一个生成树,生成树计数就是求这个无向图中一共有几种不同的生成树(任意两边不同)
- 度矩阵
n × n n × n n×n 的矩阵,统计每个点的度数,只有 i = j i= j i=j时矩阵才有正值,其余为零。 - 邻接矩阵
n × n n × n n×n 的矩阵,如果 ( u , v ) (u,v) (u,v)存在边,对应矩阵 g [ u ] [ v ] = g [ v ] [ u ] = 1 g[u][v] = g[v][u] = 1 g[u][v]=g[v][u]=1,其余为零。 - 拉普拉斯矩阵(Laplacian matrix) 也叫做导纳矩阵、基尔霍夫矩阵(Kirchhoff)或离散拉普拉斯算子,主要应用在图论中,作为一个图的矩阵表示。
度矩阵 - 邻接矩阵
生成树的个数就是Kirchhoff矩阵
n
−
1
n-1
n−1阶行列式的值
行列式模板
对于有重边的情况,拉普拉斯矩阵矩阵也能用.
例题
- ACcode
- UVA 10766
题意:公司的一些部门不能存在直接的隶属关系,问一共有多少分配部门关系的方案
生成树计数的裸题,把不能直接隶属的标记一下,求出矩阵就行 - SPOJ DETER3
裸题 - URAL 1627
题意:让所有相邻的卧室连成一个生成树,枚举每个点的四个方向求出矩阵 - HDU 4305
题意:给出 n n n个点,两点之间距离不超过一定距离的点可以相互传染,但是中间不能有其他的点。
暴力枚举所有点如果符合第一个条件,再暴力判断两点之间是不是有第三个点。
需要判断点在不在线段上,首先叉积看3点是否共线,然后判断点是不是在两点确定的矩形内部 - HDU 4408
题意:带权生成树,求一共有几个最小生成树。
Kruskal思想,从最小的点开始合并,权值相同的边不会影响的下一个权值的合并。我们只需求所有权值情况下的生成数个数,然后相乘。
中间用到缩点存在重边,不过不影响矩阵的性质 - SPOJ HIGH
裸题