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;
    }
    
  • 相关阅读:
    jquery_DOM笔记3
    jquery_DOM笔记2
    mac之jdk环境变量配置
    360导致的mysql问题解决
    windows服务器apache配置https教程
    生成自己openssl的证书
    wkhtmltopdf中文乱码
    安装ruby、rails
    extjs中返回数据时id不能重复,否则数据会被合并
    gzip压缩ext-all.js
  • 原文地址:https://www.cnblogs.com/wzj-xhjbk/p/11673518.html
Copyright © 2011-2022 走看看