博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nyoj 星际之门(一)(Cayley定理)
阅读量:6950 次
发布时间:2019-06-27

本文共 1336 字,大约阅读时间需要 4 分钟。

描述

公元3000年,子虚帝国统领着N个星系,原先它们是靠近光束飞船来进行旅行的,近来,X博士发明了星际之门,它利用虫洞技术,一条虫洞可以连通任意的两个星系,使人们不必再待待便可立刻到达目的地。

帝国皇帝认为这种发明很给力,决定用星际之门把自己统治的各个星系连结在一起。

可以证明,修建N-1条虫洞就可以把这N个星系连结起来。

现在,问题来了,皇帝想知道有多少种修建方案可以把这N个星系用N-1条虫洞连结起来?

 

 
输入
第一行输入一个整数T,表示测试数据的组数(T<=100)
每组测试数据只有一行,该行只有一个整数N,表示有N个星系。(2<=N<=1000000)
输出
对于每组测试数据输出一个整数,表示满足题意的修建的方案的个数。输出结果可能很大,请输出修建方案数对10003取余之后的结果。
样例输入
234
样例输出
316
来源
上传者

 

定义:

有n个标志节点的树的数目等于nn−2(仅是cayley在组合数学中的应用)

简单证明:

1.首先我们假设n为4,即有3个节点

2.这样的话我们就有k个子树,此时k=3

(图1)
3.选中其中一个节点
C(1n),然后x 再选中不含该节点的一个子树C(1k−1),让这颗子树的根连接到该节点上,这样的话子树就减少了一棵
(图2)
(图3)
等。。。

 

4.重复操作直到k=1,k从n变成1总共执行了n-1次,所以根据乘法原理,构造出的有确定根节点的树有ans=nn−1∗(n−1)!

5.但是对于一棵树来说,它又n-1条边,每条边被选中先后的顺序有(n−1)!种,但是对于树来说,边的先后关系是无关紧要的,所以ans=ans(n−1)!=nn−1

(图4)
(图5)
6.对于每个树来说,构造树时有确定根节点,每一个树可以将该树中的n个节点均做为根节点,于是乎ans=ansn=nn−2
(图6)
(图7)

 

代码:

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 using namespace std;13 #define INF 0x3f3f3f3f14 #define MAX 1000000 15 16 int main()17 {18 int n,m;19 scanf("%d",&n);20 while(n--){21 scanf("%d",&m);22 int ans=1;23 for(int i=0; i

 

 

 

 

数学-cayley定理   转载链接:http://blog.csdn.net/keshuai19940722/article/details/33417525

转载于:https://www.cnblogs.com/wangmengmeng/p/5303567.html

你可能感兴趣的文章
学习:数学----容斥原理
查看>>
WebSite And WebApplication
查看>>
Georgia Tech Online Master of Science in Computer Science 项目经验分享
查看>>
字王珐琅体系列,初稿ok
查看>>
浏览网上资源,了解编译原理就是什么?学习编译原理有什么好处?不学有什么损失?如何学习编译原理?...
查看>>
LeetCode 226. Invert Binary Tree
查看>>
空虚、寂寞、无聊
查看>>
基础学习笔记之opencv(1):opencv中facedetect例子浅析
查看>>
JS中属性/方法调用
查看>>
iOS 7 需要再和 Android 比什么
查看>>
8-Images
查看>>
Python字节码与解释器学习
查看>>
面试题
查看>>
PYTHON-函数对象,嵌套,名称空间与作用域,闭包函数
查看>>
使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(一)
查看>>
PHP 无限极分类
查看>>
Unity3D对象池
查看>>
KMS服务器激活Windows和Office2013EnterprisePlus
查看>>
service()、dopost()、doget()的区别
查看>>
react proxy 报错
查看>>