洛谷5437 XR 2 約定(拉格朗日插值)

2022-03-19 20:28:06 字數 1348 閱讀 1158

洛谷

首先發現每條邊除了邊權之外都是等價的,所以可以考慮每一條邊的出現次數。

顯然欽定一條邊之後構成生成樹的方案數是\(2*n^\)。可以直接\(purfer\)序列算。

也可以發現每一條邊的出現次數相等,樹的總數是\(n^\),每次出現\(n-1\)條邊,每條邊又是等價的。

也可以算出上面這個值。

於是要算的東西就變成了

\[\displaystyle \sum_^n\sum_^n(i+j)^k

\]這個東西不對稱,很不方便計算,所以可以變成:

\[\frac(\sum_^n \sum_^n (i+j)^k-\sum_^n (i+i)^k)

\]\(k\)次方這個東西顯然是個\(k+1\)次多項式,可以套進去直接拉格朗日插值計算。

拆一下變成了\(\displaystyle \sum_^ (i-1) i^k+\sum_^(2n-i+1)i^k-\sum_^n 2^ki^k\)。

然後預處理之後,可以用拉格朗日插值可以在\(o(k)\)的複雜度裡算出上面的式子,然後帶回去算期望就行了。

然後這裡怎麼拉格朗日插值。

以第乙個函式為例。

令\(f(n)=\sum_^n (i-1)i^k\),因為\(i^\)次方大概是乙個\(k+2\)次多項式,所以我們需要\(k+3\)個值,那麼顯然這個函式的前\(k+3\)項我們在預處理之後是可以提前算出來的。

然後根據拉格朗日插值的公式,對於乙個\(k\)次多項式而言:

\[p(x)=\sum_^p(x_i)\prod_^\frac

\]然後因為我們選擇的值是連續的若干項,所以可以簡單的寫成:

\[p(x)=\sum_^p(x_i)\frac}\prod_^(x-x_j)

\]在這題裡,我們都已經知道\(x\)是\(n\)了,所以後半部分的\(prod\)可以用前字尾的方式快速預處理出來,這樣子我們就可以\(o(k)\)的計算前面的部分了。

#include#includeusing namespace std;

#define mod 998244353

#define max 10000100

inline int read()

int n,k,n,ans;

int inv[max],jv[max],suf[max],pre[max];

bool zs[max];

int pri[max],tot,pw[max];

int fpow(int a,int b)return s;}

void sieve(int n) }}

int p[max];

int calc(int n)

int main()

《洛谷P5343 XR 1 分塊》

一道非常好的題,太菜了調了很久,細節非常多。首先,將題意轉化一下,由給定的兩段都有的長度,可以組成多少種組合。設dp i 表示,長度為i的方案數。那麼有轉移,dp i sum dp i a j tot為兩段都有的元素個數,注意要去重 這裡雖然可以用無限數量的揹包思想,但是顯然這樣更好。然後dp轉移,...

洛谷 P5535 XR 3 小道訊息

你可能需要用到的定理 伯特蘭 切比雪夫定理。對於所有大於1的整數n,至少存在乙個質數p,符合n p 2n。而k 1 2,滿足條件,所以就分情況討論即可 當k 1為質數,且 n 1 2 k 1 n 1 因為 2 n 1 沒有數為它的倍數,即任何數與它互質,所以只需要一天即可 當k 1為質數,且k 1 ...

洛谷 XR 3 核心城市(樹的直徑,樹形dp)

先考慮乙個點。肯定是在樹的直徑的中間rt。樹的直徑就是樹上距離最遠的兩個點的路徑。對於樹的直徑求法,常用的有兩種。兩遍bfs或dfs,從任意乙個點開始,找到距離這個點最遠的點i,再從i開始,找到距離i這個點距離最遠的點j,則i j就是樹的直徑的兩個端點 證明略 樹形dp也可以求。再推廣到n個點。以r...