码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj1016

时间:2016-04-30 07:47:21      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

学一发matrix-tree

原来这题是暴搜+玄学并查集过的…数据弱怪我咯

如果我们用matrix-tree做的话,首先边权一样的边要排完序合成一坨。

一坨边的话我们都加入并查集,并且更新度数矩阵和访问标记。(注意如果一条边的两端点原来就是连通的就忽略)

这一坨边如果我们在这一次加的边访问到了,我们就枚举和这坨加边有关的每一个连通分量,跑一下matrix-tree大法求一下这个联通块的生成树个数。

大概就是这样…我们来讲讲道理。

首先matrix-tree需要度数矩阵D,就是说当i=j时D[i][j]为i的度数,否则为0。

还有邻接矩阵A,如果i、j两点直接相连的话A[i][j]=1,否则为0。

基尔霍夫矩阵C=D-A,只要把C中的任意一行一列去掉求剩下的行列式的绝对值即可。

额行列式怎么求?

只要通过高斯消元法将矩阵化成上三角矩阵,然后求对角线的乘积。

这道题这样乱搞复杂度大概是O(n^4)的,反正能过

bzoj1016

标签:

原文地址:http://www.cnblogs.com/zzqsblog/p/5448059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!