nyoj--127--星際之門(一)(生成樹的數量)

星際之門(一)

時間限制:3000?ms ?|? 內存限制:65535?KB
難度:3
描述

公元3000年,子虛帝國統領著N個星系,原先它們是靠近光束飛船來進行旅行的,近來,X博士發明了星際之門,它利用蟲洞技術,一條蟲洞可以連通任意的兩個星系,使人們不必再待待便可立刻到達目的地。

帝國皇帝認為這種發明很給力,決定用星際之門把自己統治的各個星系連結在一起。

可以證明,修建N-1條蟲洞就可以把這N個星系連結起來。

現在,問題來了,皇帝想知道有多少種修建方案可以把這N個星系用N-1條蟲洞連結起來?

?

輸入
第一行輸入一個整數T,表示測試數據的組數(T<=100)
每組測試數據只有一行,該行只有一個整數N,表示有N個星系。(2<=N<=1000000)
輸出
對于每組測試數據輸出一個整數,表示滿足題意的修建的方案的個數。輸出結果可能很大,請輸出修建方案數對10003取余之后的結果。
樣例輸入
2
3
4
樣例輸出
3
16
來源
[張云聰]原創
上傳者

張云聰

我也不清楚為毛線這一道題為什麼會出現在圖論中,大概是證明過程,參考大神的證明:

簡單點說就是:
一一對應法:
假定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次。

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define M 10003
long long mod(int a,int b,int c)
{int t=1;if(b==0)return 1;if(b==1)return a%c;t=mod(a,b>>1,c);t=t*t%c;if(b&1)t=t*a%c;return t;
}
int main()
{int t;scanf("%d",&t);while(t--){int m;scanf("%d",&m);long long s=mod(m,m-2,M);printf("%lld\n",s);}return 0;
}


轉載于:https://www.cnblogs.com/playboy307/p/5273503.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373705.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373705.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373705.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle 常用的一些函數

字符函數 SELECT UPPER(hello WORLD) FROM DUAL; //將小寫字母變為大寫字母SELECT LOWER(hello WORLD) FROM DUAL; //將大寫字母變為小心字母SELECT INITCAP(hello WORLD) FROM DUAL; //將字符串的首字母大寫SELECT CONCAT(hello, world) FROM DUAL; //字符串拼…

Apache Camel 2.9發布–十大變化

在2011年的最后一天&#xff0c;阿帕奇駱駝制品被成功地推到了中央行銷倉庫&#xff0c;距離香檳酒瓶破裂并進入2012年僅1.5個小時之遙。 2.9版是創紀錄的發行版&#xff0c;自5個月前發布2.8版以來&#xff0c;已解決了約500張JIRA票證。 以下是10個最明顯的改進和新功能的分…

HTML5筆記——formData

注&#xff1a;formData中的數據在控制臺上的console里面是打印不出來的&#xff0c;只能在控制臺的network里面查看到具體的發送數據和發送選項 文章出處&#xff1a;夢想天空 XMLHttpRequest Level 2 添加了一個新的接口——FormData。利用 FormData 對象&#xff0c;我們可以…

JavaScript 學習隨記——==和===及常見元素的真假值

“” 和 “” 符合的使用 <script>/*** 表示可以經過自動轉換&#xff0c;比較的是數值*///example01if(1 true && false 0 && true 1){console.log(1true);console.log(" 比較的是等號兩邊數據的值是否相等&#xff08;可以經過自動轉換&#…

運維祈求不宕機_[國慶特輯] 程序員應該求誰保佑才能保證不宕機?

一年國慶又到&#xff5e;程序猿、運維工程師、利用假期該結婚的結婚&#xff0c;該回老家的回老家。產品經理、項目經理們也要出國旅游了(好像這次是去東京玩)&#xff0c;并且叮囑一定要安排好值班表。我是個程序員&#xff0c;我也想出國旅游&#xff0c;卻覺得有點兒貴。多…

Oracle Weblogic 11g(10.3.4)的小知識

本周&#xff0c;我將為Weblogic進行許多設置和配置&#xff08;我猜是開發人員&#xff09;。 在過去的4年中&#xff0c;我一直在與Weblogic合作&#xff0c;并且我不得不承認-與Eclipse類似-我已經開始使用它。 我曾經是Netbeans / JBoss開發人員&#xff0c;后來轉向Eclips…

java中HashMap的用法

重點介紹HashMap。首先介紹一下什么是Map。在數組中我們是通過數組下標來對其內容索引的&#xff0c;而在Map中我們通過對象來對對象進行索引&#xff0c;用來索引的對象叫做key&#xff0c;其對應的對象叫做value。在下文中會有例子具體說明。 再來看看HashMap和TreeMap有什么…

關于 MVCC 的基礎

作為第一篇對 MVCC 的學習材料&#xff0c;以下內容翻譯自 Wikipedia。 1. 什么是MVCC 1.1 基礎概念 MVCC&#xff0c;Multi-Version Concurrency Control&#xff0c;多版本并發控制。MVCC 是一種并發控制的方法&#xff0c;一般在數據庫管理系統中&#xff0c;實現對數據庫的…

集成測試CDI 1.0和Spring 3.1中的作用域bean

在這篇博客文章中&#xff0c;我描述了如何在Spring和CDI中使用作用域bean進行集成測試。 一切都用小代碼示例進行說明。 使用范圍進行集成測試并不是特別容易。 想象一下存在于會話范圍內的bean&#xff0c;例如UserCredentials 。 在集成測試中&#xff0c;通常沒有HttpReque…

JavaScript學習隨記——數組一

數組的創建及length屬性 <script type"text/javascript" charset"utf-8">// 數組創建方式一,此種方式寫的時候比較麻煩var arrnew Array();// 數組創建方式二var arr [1,2,3,4,true,str,new Date()];console.log("arr.length&#xff1a;"…

USACO milk4 枚舉答案再檢驗

剛開始寫了一個暴力的dfs超時了&#xff0c; 最后看了下題解說是先枚舉答案再判斷&#xff0c;然后就寫了雙dfs&#xff0c;全部秒殺&#xff0c;代碼如下&#xff1a; /*ID: m1500293LANG: CPROG: milk4 */ #include <cstdio> #include <cstring> #include <al…

微信小程序常見問題集合(長期更新)

最新更新&#xff1a; 新手跳坑系列&#xff1a;推薦閱讀&#xff1a;《二十四》request:fail錯誤&#xff08;含https解決方案&#xff09;&#xff08;真機預覽問題 跳坑指南《七十》如何讓微信小程序服務類目審核通過跳坑六十九&#xff1a;uploadFile:fail Error: unable t…

mysql指令按順序排列_mysql基本語法大全

1.備份數據庫&#xff1a;1.1備份數據庫中的表:mysqldump -u root -p test a b >d:\bank_a.sql//分別備份數據庫test下a和b表1.2備份一個數據庫mysqldump -u root -p test > d:\testbk.sql1.3備份多個數據庫mysqldump -u root -p --databases test mysql > D:\data.sq…

Spring和石英:多作業計劃服務

作業調度對于應用程序來說是如此重要。 尤其是在大型項目中&#xff0c;處理大量工作可能是一個問題。 Spring和Quartz為解決該問題帶來了巨大的好處。 本文介紹了如何通過使用Spring和Quartz輕松地計劃多個作業。 二手技術&#xff1a; JDK 1.6.0_21 春天3.1.1 石英1.8.5 M…

JavaScript學習隨記——數組二

數組indexOf(arg) 和 lastIndexOf(arg)方法使用 <script type"text/javascript" charset"utf-8">/*** indexOf(arg):返回指定參數在數組中的索引位置&#xff08;從前往后查&#xff0c;比較是使用 ‘’&#xff0c;查詢到立即返回索引位置&#xff…

反射的簡單應用

首先有一個類 1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 using System.Threading.Tasks;6 7 namespace ConsoleApplication18 {9 public class demo 10 { 11 public string name "程序員"; 12…

JavaFX 2.0示例介紹書

我最近完成了有關JavaFX 2.0 SDK新版本的書的編寫&#xff0c;并且已經將它放在您附近的書店&#xff08; Amazon &#xff09;的書架上。 該書將逐步指導您完成JavaFX 2.0的來龍去脈。 當您遇到一章時&#xff0c;將看到一些菜譜&#xff0c;這些菜譜將帶來一個問題&#xff0…

雙縱坐標的繪圖命令_工程師繪圖必備軟件——OriginLab 2019b

點擊右上角關注&#xff0c;盡享后續精品軟件OriginLab 2019b是OriginLab OriginPro 2019版本的加強版&#xff0c;這個軟件對于許多人來講并不陌生&#xff0c;可以說是科學家和工程師的繪圖必備軟件。新的版本也帶來許多改變&#xff0c;軟件擁有多種功能&#xff0c;這個版本…

JavaScript學習隨記——對象

JS中對象基本使用 <script type"application/javascript" charset"utf-8">//Objcet 所有類的基礎類/*** 創建對象方式一*/ // var objnew Objcet();/** 創建對象方式二,注意 {}不可忘記寫* */var obj {};obj.name "什碼情況";obj.age …

[轉]Java_List元素的遍歷和刪除

原文地址:http://blog.csdn.net/insistgogo/article/details/19619645 1、創建一個ArrayList [java] view plainList<Integer> list new ArrayList<Integer>(); 2、List常用的遍歷方法有三種&#xff1a; &#xff08;1&#xff09;下標循環 [java] view plainfo…