zoukankan      html  css  js  c++  java
  • 【洛谷P4430】小猴打架

    题目大意:求带标号 N 个点的生成树个数,两棵生成树相同当且仅当两棵树结构相同且边的生成顺序相同。

    题解:学会了 prufer 序列。
    prufer 序列是用来表示带标号的无根树的序列。
    每种不同类型的带标号无根树会对应唯一的一个prufer序列。
    生成方法:找到这棵树编号最小的叶子节点,将其相邻点加入到序列中,删掉这个点。重复这个过程直到树中只剩下两个点,此时得到的序列即为该树的 Prufer 序列。
    性质:在原树中度数为 d 的点,在Prufer序列中出现了 d−1 次。

    对于本题来说,在生成树结构相同的情况下,共有 (n - 1)! 种加边顺序。另外,根据 Prufer 序列的性质,共有 (n^{n - 2}) 种不同结构的生成树。因此,两部分的答案相乘即可。

    代码如下

    #include <bits/stdc++.h>
    
    using namespace std;
    
    typedef long long LL;
    
    const LL mod = 9999991;
    
    int main() {
    	int n;
    	cin >> n;
    	LL ans = 1;
    	for (int i = 1; i <= n - 1; i++) ans = ans * i % mod;
    	for (int i = 1; i <= n - 2; i++) ans = ans * n % mod;
    	cout << ans << endl;
    	return 0;
    }
    
  • 相关阅读:
    数据科学 R语言速成
    F#周报2019年第29期
    F#周报2019年第28期
    F#周报2019年第27期
    F#周报2019年第26期
    F#周报2019年第25期
    F#周报2019年第24期
    F#周报2019年第23期
    .NET工程师的书单
    F#周报2019年第22期
  • 原文地址:https://www.cnblogs.com/wzj-xhjbk/p/11673518.html
Copyright © 2011-2022 走看看