1. 程式人生 > >bzoj1430: 小猴打架(prufer序列)

bzoj1430: 小猴打架(prufer序列)

tdi prufer序列 %d -s font targe mil 所有 namespace

1430: 小猴打架

題目:傳送門


簡要題意:

   n只互不相識的猴子打架,打架之後就兩兩之間連邊(表示已經相互認識),只有不認識(朋友的朋友都是朋友)的兩只猴子才會打架。最後所有的猴子都會連成一棵樹,也就是經過n-1次打架,求不同的打架方案數。


題解:

   我們需要一個強大的方法:prufer序列。。。

   這個東西很牛逼!!!

   簡單來說就是把一顆n個節點的無根樹,轉換為n-2的一個序列

   序列和樹之間兩兩可互相轉化,且是一一對應的。

   具體%%%神犇:prufer序列


思考niang小時,代碼niang分鐘:

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 typedef long long LL;
 5 const LL mod=9999991LL;
 6 int n;
 7 int main()
 8 {
 9     LL ans=1;
10     scanf("%d",&n);
11     for(int i=1;i<=n-2;i++)ans=ans*n%mod;
12     for(LL i=1;i<n;i++)ans=ans*i%mod;
13 printf("%lld\n",ans); 14 return 0; 15 }

bzoj1430: 小猴打架(prufer序列)