hihocoder 1511 樹的方差

2021-09-28 09:54:53 字數 1621 閱讀 8285

【題目鏈結】:

【題意】

【題解】

有個方差的公式 v(

x)=e

(x2)

−e(x

)2這裡e(x)指的是x的期望;

顯然所有樹的度數的期望都是2*(n-1)/n

則問題轉換成求e(x^2)了;

這裡用到了樹的prufer數列->關於prufer數列

即每乙個prufer數列都對應了不同的樹;

然後根據數列中的數字出現的次數和其在樹中的度數的關係;

我們可以列舉每乙個節點在prufer數列**現的次數x;

在n-2個位置中選x個位置放這個節點->c(n-2,x)

則剩餘n-2-x個位置,每個位置都有n-1種選擇即(n-1)^(n-2-x)

然後它的度數就是x+1,因為求的是x方的期望,所以累加度數的時候加的是(x+1)^2

然後有n個節點,每個節點都可以這樣,所以再乘個n;

這樣我們就算出了;

所有n個節點的樹;

所有節點的度數的平方的和;

則再除個n就是e(x^2)了;

分數的取模其實就是用乘法逆元搞;

和能整除的分數一樣;

階乘的乘法逆元求的時候只要求最大的那個,小的直接列舉就能得到;

【number ofwa】

3 【完整**】

#include 

using

namespace

std;

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define ll long long

#define rep1(i,a,b) for (int i = a;i <= b;i++)

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

#define mp make_pair

#define pb push_back

#define fi first

#define se second

#define ms(x,y) memset(x,y,sizeof x)

typedef pair pii;

typedef pairpll;

const

int dx[9] = ;

const

int dy[9] = ;

const

double pi = acos(-1.0);

const

int n = 1e6+100;

const ll mod = 998244353;

ll fac[n],***c[n],ans = 0,n,pre[n],ex;

ll ksm(ll x,ll y)

return t;

}ll c(ll n,ll m)

int main()

ans = (ans+mod-ex*ksm(n,mod-2)%mod)%mod;

ans = ans*ksm(n,mod-2)%mod;

cout

<< ans << endl;

return

0;}

hihoCoder 1014 Trie樹(字典樹)

1014 trie樹 時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述 小hi和小ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。這一天,他們遇到了一本詞典,於是小hi就向小ho提出了那個經典的問題...

字典樹模板(HihoCoder 1014)

include using namespace std struct nodetr 1000010 陣列大小開n 插入最多單詞個數 l 最長單詞長度 int num 0 void tr insert char s rt tr rt z id tr rt sum 標記前面字元相同,以s i 結尾的單詞...

hihoCoder 1116 計算 線段樹

題意 描述現在有乙個有n個元素的陣列a1,a2,an。記f i,j ai ai 1 aj。初始時,a1 a2 an 0,每次我會修改乙個ai的值,你需要實時反饋給我 f i,j 1 i j n 的值 mod 10007。輸入第一行包含兩個數n 1 n 100000 和q 1 q 500000 接下來...