複雜度大概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...