过n个有标志顶点的数的数目是n^(n-2)

转载 2013年12月02日 17:51:35

在一个n阶完全图的所有生成树的数量为n的n-2次方

例题:nyoj 127


#include<iostream>
using namespace std;
int f(int n)
{
    int t,i;
    t=n;
    for(i=1;i<n-2;i++)
    {
        t*=n;
        t%=10003;
    }
    return t;
}
int main()
{
    int t,n,m,i;
    cin>>t;
    while(t--)
    {
        cin>>n;
        if(n==2)
        cout<<1<<endl;
        else
        cout<<f(n)<<endl;
    }
}简单点说就是:
一一对应法:
假定T是其中一棵树,树叶中有标号最小者,设为a1,a1的邻接点为b1,从图中消去a1点
和边(a1, b1).b1点便成为消去后余下的树T1的顶点.在余下的树T1中寻找标号最小的树叶,设
为a2,a2的邻接点为b2,从T1中消去a2及边(a2, b2).如此步骤继续n-2次,直到最后剩下一条
边为止.于是一棵树T对应一序列
b1,b2,…,b[n-2]
恢复树T:
序列I    1,2,…n
序列II   b1,b2,…,b[n-2]
在I中找出第一个不出现在II中数,显然是a1,连接边(a1, b1),在I中消去a1,在II中消
去b1.如此步骤重复n-2次,序列I中两个数,构成最后一条边.

以下是来自Matirx67的blog.

ayley公式是说,一个完全图K_n有n^(n-2)棵生成树,换句话说n个节点的带标号的无根树有n^(n-2)个。Cayley公式的一个非常简单的证明,证明依赖于Prüfer编码,它是对带标号无根树的一种编码方式。
    给定一棵带标号的无根树,找出编号最小的叶子节点,写下与它相邻的节点的编号,然后删掉这个叶子节点。反复执行这个操作直到只剩两个节点为止。由于节点数n>2的树总存在叶子节点,因此一棵n个节点的无根树唯一地对应了一个长度为n-2的数列,数列中的每个数都在1到n的范围内。下面我们只需要说明,任何一个长为n-2、取值范围在1到n之间的数列都唯一地对应了一棵n个节点的无根树,这样我们的带标号无根树就和Prüfer编码之间形成一一对应的关系,Cayley公式便不证自明了。
     看到这,我建议自己划一划,结果就出来了(这句话是我的建议,非Matrix67原文)。
注意到,如果一个节点A不是叶子节点,那么它至少有两条边;但在上述过程结束后,整个图只剩下一条边,因此节点A的至少一个相邻节点被去掉过,节点A的编号将会在这棵树对应的Prüfer编码中出现。反过来,在Prüfer编码中出现过的数字显然不可能是这棵树(初始时)的叶子。于是我们看到,没有在Prüfer编码中出现过的数字恰好就是这棵树(初始时)的叶子节点。找出没有出现过的数字中最小的那一个(比如④),它就是与Prüfer编码中第一个数所标识的节点(比如③)相邻的叶子。接下来,我们递归地考虑后面n-3位编码(别忘了编码总长是n-2):找出除④以外不在后n-3位编码中的最小的数(左图的例子中是⑦),将它连接到整个编码的第2个数所对应的节点上(例子中还是③)。再接下来,找出除④和⑦以外后n-4位编码中最小的不被包含的数,做同样的处理……依次把③⑧②⑤⑥与编码中第3、4、5、6、7位所表示的节点相连。最后,我们还有①和⑨没处理过,直接把它们俩连接起来就行了。由于没处理过的节点数总比剩下的编码长度大2,因此我们总能找到一个最小的没在剩余编码中出现的数,算法总能进行下去。这样,任何一个Prüfer编码都唯一地对应了一棵无根树,有多少个n-2位的Prüfer编码就有多少个带标号的无根树。

    一个有趣的推广是,n个节点的度依次为D1, D2, …, Dn的无根树共有(n-2)! / [ (D1-1)!(D2-1)!..(Dn-1)! ]个,因为此时Prüfer编码中的数字i恰好出现Di-1次。

(精)(图论加强)n阶无向最小生成树的个数是n^n-2

#include #include using namespace std; int main() { //freopen("in.txt","r",stdin); int casen;int n...
  • longyuan20102011
  • longyuan20102011
  • 2012-05-05 22:44:14
  • 434

Cayley n顶点树数定理

今天遇到一个问题:在一个n阶完全图的所有生成树的数量为n的n-2次方,想了好久也没有想出来,还是在网上找到的。。。 简单点说就是: 一一对应法: 假定T是其中一棵树,树叶中有标号最小者,设为a1...
  • gongqian12345
  • gongqian12345
  • 2012-04-10 15:14:10
  • 4486

证明N个节点构成一棵树的种类数

经典证明:Prüfer编码与Cayley公式        Cayley公式是说,一个完全图K_n有n^(n-2)棵生成树,换句话说n个节点的带标号的无根树有n^(n-2)个。今天我学到了Ca...
  • Vis_Stu
  • Vis_Stu
  • 2015-11-01 15:18:15
  • 2098

经典证明:Prüfer编码与Cayley公式–过n个有标志顶点的树的数目等于n^(n-2)

转自http://blog.himdd.com 在一个n阶完全图的所有生成树的数量为n的n-2次方,想了好久也没有想出来,还是在网上找到的。。。 简单点说就是: 一一对应法: 假定T是...
  • fire__ice
  • fire__ice
  • 2012-03-26 08:58:21
  • 908

Cayley定理在组合数学中的应用

Cayley定理又称凯莱定理 过n个有标志顶点的树的数目等于n^(n-2) 可以实现将树转化成一个一一对应的序列,根据规则可以互相转化。 第一步:树转化成一一对应的序列 任给一颗有n个标号的树,逐个...
  • q383700092
  • q383700092
  • 2016-05-05 10:15:02
  • 441

NYOJ127 - 星际之门(一)(n个节点的完全树有n^n-2个最小生成树)

【题目】 星际之门(一) 时间限制:3000 ms  |            内存限制:65535 KB 难度:3 描述 公元3000年,子虚帝国统领着N个星系,原先它们是靠近光...
  • u012760629
  • u012760629
  • 2014-10-15 18:33:15
  • 649

n个节点的二叉树有多少种形态

【n个节点的二叉树有多少种形态(Catalan数)】分析过程: (1)先考虑只有一个节点的情形,设此时的形态有f(1)种,那么很明显f(1)=1(2)如果有两个节点呢?我们很自然想到,应该在f(1)...
  • adminabcd
  • adminabcd
  • 2015-06-28 17:32:49
  • 10725

过n个有标志顶点的数的数目是n^(n-2)

在一个n阶完全图的所有生成树的数量为n的n-2次方 例题:nyoj 127 #include using namespace std; int f(int n) {     int ...
  • u010801915
  • u010801915
  • 2013-12-02 17:51:35
  • 911

算法导论6.3-3 证明完全二叉树高度为h的结点个数上限「n/2^(h+1)」

这个问题可以使用以下几种方法进行证明:  (1) 使用结点高度的定义 假设某结点序号为i,则其最长路径为i, i*2, i*2^2,....,i*2^h,而且I*2^(h+1) > n,于是有不等...
  • wdq347
  • wdq347
  • 2013-04-19 10:40:06
  • 3016

星际之门(一)(凯莱定理+快速幂)

星际之门(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 公元3000年,子虚帝国统领着N个星系,原先它们是靠近光束飞船来进行旅行的...
  • baidu_23955875
  • baidu_23955875
  • 2015-07-11 18:52:41
  • 313
收藏助手
不良信息举报
您举报文章:过n个有标志顶点的数的数目是n^(n-2)
举报原因:
原因补充:

(最多只允许输入30个字)