Kruskal 重构树入门 - 「NOI 2018」 归程

发布于 # algorithm

Kruskal 重构树

Kruskal 最小/大生成树 — Luogu P1967 货车运输 一文中,介绍了 Kruskal 算法是如何生成最小生成树的

如果将两个联通块联通的不是边而是点呢?

这就是 Kruskal 重构树

具体来说就是,我们原来是通过一条边将两个联通块相连接的,现在我们新建立一个点,将这两个联通块的根节点连接到这个点上,原来的边权就是这个新建节点的点权,这样执行下来,我们会得到一棵新的树,这个树有以下两个特征

  • 没有 边权
  • 保证是一个堆
    • 大根堆还是小根堆要看 原来 生成的是最小还是最大生成树
    • 因为我们保证边权的单调性,故后期新建节点的点权也是单调的,故新树是一个堆

可重组合与不相邻组合

发布于 # algorithm

可重组合

1,2,3,n1,n{1, 2, 3 \cdots, n - 1, n} 中选出 mm 个元素,可以重复,有多少个不同的组合?

答案 Cn+m1mC_{n + m - 1}^{m}

证明

显然,问题可以转换为 mm 个球放入 nn 个盒子,可以放无数个或者不放

即插入 n1n - 1 个隔板,然后求全排列 (m+n1)!(m + n - 1)!

但是隔板和球的顺序是无效的所以除去 m!×(n1)!m! \times (n-1)!

(m+n1)!m!×(n1)!=Cn+m1m\frac{(m + n - 1)!}{m! \times (n - 1)!} = C_{n + m -1}^m

Woshiluo's NoteBook

「Jump up HIGH!!」