题目大意

  求\(n\)个点\(n\)条边的无向连通图的个数

  \(n\leq 5000\)

题解

  显然是一个环上有很多外向树。

  首先有一个东西:\(n\)个点选\(k\)个点作为树的根的生成森林个数为:
\[ \binom{n}{k}\times n^{n-k-1}\times k \]
  前面\(\binom{n}{k}\)是这些根的选编号的方案数,后面是prufer序列得到的:前面\(n-k-1\)个数可以是\(1\)~\(n\),第\(n-k\)个数是\(1\)~\(k\)。

  我的理解是:每个序列决定了一部分点作为"叶子节点",剩下的每个点按顺序选一个编号最小的"叶子节点"作为这个点的儿子(选编号最小的是因为1.如果一个点可以选多个儿子就不会重复计数;2.两个数的先后顺序不同,那么选的儿子也不同,会让先后顺序成为影响因素),然后如果这个点不能再选儿子,那么这个点就会成为"叶子节点"。选了\(n-k-1\)个点后会剩下\(k\)个根和一个不是根的点,然后\(k\)个根中的一个点连向剩下这个点。

  最后\(k\)个点的环的排列方式有\(\frac{(k-1)!}{2}\)。你可以选编号最小的点为"根",剩下\(k-1\)个点每次选一个点连向上一个点,最后一个点再连向第一个点。因为环可以翻转,所以方案数要除以\(2\)。你也可以认为是先生成一个排列,然后旋转这个环(除以\(k\)),然后翻转这个环(除以\(2\))。

  最终的式子是
\[ \begin{align} &~~~~~\sum_{k=3}^{n}\binom{n}{k}\times n^{n-k-1}\times k\times \frac{(k-1)!}{2}\\ &=\sum_{k=3}^{n}\frac{n!\times n^{n-k-1}\times k\times (k-1)!}{k!\times (n-k)!\times 2}\\ &=\sum_{k=3}^{n}\frac{n!n^{n-k-1}}{2(n-k)!} \end{align} \]
  写个高精度什么的乱搞一下就可以了。

  时间复杂度:\(O(n^2)\)

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
int p=10000;
struct bign
{int a[5010];bign(){memset(a,0,sizeof a);}int &operator [](int x){return a[x];}bign &operator *=(int v){int i,s,g=0;bign &a=*this;for(i=1;i<=5000;i++){s=g+a[i]*v;g=s/p;a[i]=s%p;}return a;}bign &operator /=(int v){int i,s,g=0;bign &a=*this;for(i=5000;i>=1;i--){s=g*p+a[i];a[i]=s/v;g=s%v;}g=0;for(i=1;i<=5000;i++){s=g+a[i];a[i]=s%p;g=s/p;}return a;}bign &operator +=(bign &b){int i,s,g=0;bign &a=*this;for(i=1;i<=5000;i++){s=a[i]+b[i]+g;a[i]=s%p;g=s/p;}return a;}
};
bign a,ans;
int main()
{int n;scanf("%d",&n);int i;a[1]=1;for(i=2;i<=n-1;i++)a*=i;ans+=a;for(i=n-1;i>=3;i--){a*=n;a/=n-i;ans+=a;}ans/=2;for(i=5000;!ans[i];i--);printf("%d",ans[i]);for(i--;i;i--)printf("%04d",ans[i]);printf("\n");return 0;
}

转载于:https://www.cnblogs.com/ywwyww/p/8511316.html

【XSY1295】calc n个点n条边无向连通图计数 prufer序列相关推荐

  1. CF :K 一个含n条边的带权无向连通图,q次查询,每次查询两点间的最短距离。...

    题意:给你一个含n条边的带权无向连通图,q次查询,每次查询两点间的最短距离. 思路:LCA+思维. 设a,b两点间的距离为f(a,b) 则f(a,b)=dis[a]+dis[b]-2*dis[lca( ...

  2. 快速订单号生成(两秒左右10万条数据无重复)

    订单号生成 在开发当中我想大部分程序员都会做商城类的项目,其中订单号是一个相对比较重要的数据,在用户下单是不允许有重复订单生成的. 我给大家提供了一个生成订单的方法,希望对您有所帮助!!!!!!!!! ...

  3. 股票预测 预测结果一条直线 无特征 烦恼一周了

    学习率调整无效果 数据归一化无效果 特征字段添加减去 效果忽略 模型增加RNN层 无效果 添加模型天数 效果不明显 import numpy as np import matplotlib.pyplo ...

  4. [学习笔记]多项式与有标号简单图计数

    学了一天的有标号无向图计数真的自闭了- 本篇文章是基于2019WC汪乐平大佬的讲课课件<生成函数,多项式算法与图的计数>编写的. 注意:文中所有生成函数都规定为指数型生成函数(EGF),请 ...

  5. CCF-CSP Python Cheat Sheet

    这里写自定义目录标题 Python Cheat Sheet string 字符串的运算 格式化输出 三引号 其他 List Dictionary Set Graph 邻接表形式 DFS BFS 杂项 ...

  6. 吃货JYY[JSOI2013][状压][欧拉回路]

    文章目录 题目 思路 代码 题目 nnn 个点 mmm 条边无向连通图,每条边有权值,指定 KKK 条边必须选,每条边可以经过多次,问从 111 出发遍历完必须边最后回到 111 的最小花费? n≤1 ...

  7. excel处置4000行数据卡_懂Excel就能轻松入门Python数据分析包pandas(三):制作成绩条...

    系列文章: 经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦得要死.后来才发现,原来不是 Python 数据处理厉害,而是他有数据分析神器-- pandas 前言 很 ...

  8. 怎么批量生成100多条短视频素材

    怎么批量生成100多条短视频素材#批量#生成#短视频 一天如何能生产出100条好无分享的视频,人家一天能做出百来条视频发抖音挂下黄车赚钱,你一天做两条视频就已经累到不行了,所以今天我把这些压箱底的方法 ...

  9. 拼接两条有重叠区域的核酸序列

    目的 27F 和 1492R 是细菌 16S 核糖体基因的一对通用引物.利用这对引物扩增DNA提取物,然后进行Sanger法测序,能获得两条长度约为 800+ 的 DNA 序列.根据正链(+)和负链( ...

最新文章

  1. MySQL的登陆错误:ERROR 1049 (42000): Unknown database 'root'
  2. mysql in or索引失效_in 索引失效的问题
  3. Metasploit Framework(1)基本命令、简单使用
  4. MySQL8.0 - 新特性 - 说说InnoDB Log System的隐藏参数
  5. dbgrid 获取前台页面参数
  6. LeetCode-105:从前序与中序遍历序列构造二叉树
  7. gogs可以自动化部署吗_效率提升利器:你还害怕自动化部署吗?
  8. iOS TableView多级列表
  9. mysql硬盘备份_原创-在mysql中把里面的数据库备份到自己的硬盘上
  10. English Grammar
  11. (原创)使用tensorflow及anaconda(spyder)时遇到的问题
  12. 爬虫_4、requests的post方法以及json字符串处理
  13. 网盘智能识别助手,提取码自动填写的油猴脚本
  14. 大数据下 移动计算 和 移动数据的一点理解
  15. 产品经理职责技能和所需证书
  16. 团队项目绩效考核方案表
  17. 解决pdf中翻译外文文献到word参考文献格式错误
  18. supermap 点云_SuperMap新一代三维GIS技术体系
  19. PowerManagerService分析-updatePowerStateLocked方法
  20. rust的错误和异常

热门文章

  1. 顺丰科技2021届春季招聘正式启动!
  2. 重磅 | 《机器学习综述》算法分类及特征工程手推笔记!
  3. html5鼠标放大,利用HTML5实现粒子游走鼠标经过放大特效
  4. linux添加svn副本目录,关于linux svn添加忽略目录的梗
  5. windows 弹shell_Windows系统常用免费软件“红黑榜”
  6. hj212协议数采仪_CEMS系统配套用环保数采仪 HJ212协议上传
  7. 32f4 usb 升级程序_不断中招的你还放心升级win10吗?wi10近期更新问题及解决办法...
  8. 华为荣耀20和x10比较_华为和荣耀旗舰该如何选?其实懂手机的朋友只选择前者...
  9. 不懂电脑如何买电脑_如何选择性价比高的电脑 买电脑要注意什么
  10. 从零开始实现数据结构(一) 动态数组