小猴打架(Prufer 序列)

2021-10-05 10:22:47 字數 1119 閱讀 9001

題目描述

一開始森林裡面有n只互不相識的小猴子,它們經常打架,但打架的雙方都必須不是好朋友。每次打完架後,打架的雙方以及它們的好朋友就會互相認識,成為好朋友。經過n-1次打架之後,整個森林的小猴都會成為好朋友。

現在的問題是,總共有多少種不同的打架過程。

比如當n=3時,就有六種不同的打架過程。

輸入 乙個整數n。

輸出 一行,方案數mod 9999991。

樣例輸入 copy

4

樣例輸出 copy

96

提示50%的資料n<=10^3。

100%的資料n<=10^6。

了解一下:

prufer 序列

#pragma gcc optimize(3 , "ofast" , "inline")

#include #define rep(i , a , b) for(register int i=(a);i<=(b);i++)

#define per(i , a , b) for(register int i=(a);i>=(b);i--)

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

typedef pairpi;

templateinline void read (t &x)

while (c >= '0' && c <= '9')

x = x * sign;}

const int maxn = 3e5 + 10;

const int inf = int (1e9);

const ll inf = ll (1e18);

const double pi = acos (- 1);

const int mod = 9999991;

const double eps = 1e-8;

ll qpow(ll a,ll b)

return ans;

}int main ()

bzoj1430 小猴打架 prufer序列

注釋 略。想法 我們發現打架的情況就是一棵樹。我們只需要把確定樹的形態然後乘以 n 1 表示生成這棵樹時邊的順序。一共 n 個節點我們發現數的形態一共有 n 種。所以答案就是 n cdot n 1 code include include include include define mod 999...

BZOJ1430小猴打架 prufer序列

一開始森林裡面有n只互不相識的小猴子,它們經常打架,但打架的雙方都必須不是好朋友。每次打完架後,打架 的雙方以及它們的好朋友就會互相認識,成為好朋友。經過n 1次打架之後,整個森林的小猴都會成為好朋友。現 在的問題是,總共有多少種不同的打架過程。比如當n 3時,就有六種不同的打架過程。乙個整數n,n...

BZOJ 1430 小猴打架 prufer編碼

prufer編碼和無根樹的轉化問題 樹化prufer 在葉子節點中尋找編號最小的節點,將與之相連的父節點加入prufer佇列裡,然後刪去該葉子節點,直至圖中只剩下2個節點,於是prufer數列共有n 2位 於是對於乙個完全圖求生成樹的個數,他的prufer序列裡有 n 2 位,每一位均可取1 n,於...