UVa 11597 - Spanning Subtree

来源:互联网 发布:协同过滤具体算法 编辑:程序博客网 时间:2024/05/16 10:19

題目:有n個頂點的無向完全圖,最多能生成多少個沒有公共邊的生成樹。

分析:圖論,數論。

            首先,n個頂點的完全圖共有n*(n-1)/ 2條邊,n個頂點的生成樹都含有n-1條邊,則最多為n/2個;

            然後,存在性證明,利用構造方法,取生成樹的邊的方法如下(等差數列方式);

                        <1,2>,<2,3>,<3,4>,...

                        <1,3>,<3,5>,<5,7>,...

                        ...

                        <1,a+1>,<a+1,2*a+1>,...

                        只需證明不存在<n1*a1+1,n1*a1+a1+1>与<n2*a2+2,n2*a2+a2+1>相同即可(a<=n/2);

                        将所有数字都减去1则,如果相同则只可能是:

                        n1*a1 ≡ n2*a2+a2 (mod n)  与 n2*a2 ≡ n1*a1+a1 (mod n) 將兩式相加可得 a1 = a2,得證;

說明:╮(╯▽╰)╭。

#include <stdio.h>int main(){int n, m = 1;while (~scanf("%d",&n) && n)printf("Case %d: %d\n", m ++, n/2);return 0;}


0 0