HDU4625 JZPTREE 第二類斯特林數

2022-02-05 12:27:22 字數 1628 閱讀 7448

複雜度大概o(nk)

一些嘗試:

1.對每個點推出1,2,3,,,到k次方的值。但是臨項遞推二項式展開也要考慮到具體每個點的dist

2.相鄰k次方遞推呢?遞推還是不能避免k次方的展開

k次方比較討厭,於是考慮用斯特林數處理

轉化成求k個後面這個c(dis,i)

組合數相比較於k次方有什麼好處呢?

有直接的簡單的遞推式!

並且恰好的是,可以直接樹形dp,距離對於子樹恰好-1

o(nk)樹形dp一遍

然後換根o(nk)再處理一遍

回到主函式,把之前的那些東西在分別乘上加起來即可。

#include#define reg register int

#define il inline

#define numb (ch^'0')

using

namespace

std;

typedef

long

long

ll;il

void rd(int &x)

namespace

miraclee[

2*n];

inthd[n],cnt;

intf[n][k];

intg[n][k];

intjie[k],s[k][k];

void add(int x,int

y)void dfs(int x,int

fa) }

f[x][

0]=(f[x][0]+1)%mod;

}void sol(int x,int

fa)

else

}for(reg i=hd[x];i;i=e[i].nxt)

}void

clear()

intmain()

}jie[

0]=1

;

for(reg i=1;i<=501;++i) jie[i]=jie[i-1]*i%mod;

while(t--)

dfs(

1,0);

//for(reg i=1;i<=n;++i)cout/

}cout

);//

for(reg i=1;i<=n;++i)cout/

}cout

printf(

"%d\n

",ans);}}

return0;

}}signed main()

/*author: *miracle*

date: 2018/12/29 19:09:56

*/

總結:這個就真的比較有趣了

把n^k換成斯特林數,還有乙個原因是n^k實在不好支援遞推

組合數就比較輕鬆了。

恰好樹形dp的遞推特點和組合數的遞推式又比較好的吻合在一起!

(當然,n的i次下降冪也有不錯的遞推性質,也可以不用轉化成組合數直接模擬遞推,本質相同。)

hdu 2852 求第k大數值

題意 設計一種資料結構,該資料結構有以下三種操作 1 0 a,新增乙個數字a 2 1 a,刪除乙個數字a,若該數字不存在,輸出 no elment 3 2 a k,輸出比a大的第k個數字,若不存在,輸出 not find 分析 典型的用樹狀陣列求第k大數字,對應操作 1 add a,1 2 add ...

hdu 5754 多校第3場

比賽的時候不知道如何把棋盤博弈轉換為取石子博弈,並且在畫馬的pn表的時候出錯了,沒有遵從只n則p的規則,還有就是皇后的走法也沒想到是威佐夫博弈,之前沒做過,題量少。比完之後,結合別人的想法了解了把棋盤博弈轉化為取石子博弈的方法 附上 includeusing namespace std int a ...

字串處理 HDU第1062解題報告

題目鏈結 思想很簡單,接收字串,然後寫個函式,遍歷字串,遇到空格或者遇到串為就逆序輸出。下面是 include include includeusing namespace std void output the right string string str int main void outpu...