题解 [BZOJ2159] Crash的文明世界】的更多相关文章

题面 解析 这题一眼换根DP啊 首先,我们考虑一下如何转换\(n^m\)这个式子, 先把式子摆出来吧:\(n^m=\sum_{j=0}^mS(m,j)C_n^jj!\) 其中\(S(m,j)\)表示第二类斯特林数, (其实就是把\(m\)个不同的小球放到\(j\)个相同的盒子里,且盒子不为空的方案数) 我们感性理解一下(懒得不会推式子), \(n^m\)其实就表示将\(m\)个不同的球放入\(n\)个不同的盒子里, 而我们可以枚举有\(j\)个盒子里面放了小球, 那么方案数就是\(S(m,j)\…
题目链接 BZOJ2159 题解 显然不能直接做点分之类的,观察式子中存在式子\(n^k\) 可以考虑到 \[n^k = \sum\limits_{i = 0} \begin{Bmatrix} k \\ i \end{Bmatrix} {n \choose i}i!\] 发现\(k\)很小,对于每个点可以直接\(O(k)\)计算 所以我们只需求出 \[f[i][j] = \sum\limits_{x = 1}^{N}{dis(i,x) \choose j}\] 转移可以利用 \[{n \choo…
根据组合意义,有nk=ΣC(n,i)*i!*S(k,i) (i=0~k),即将k个有标号球放进n个有标号盒子的方案数=在n个盒子中选i个将k个有标号球放入并且每个盒子至少有一个球. 回到本题,可以令f[i][j]表示ΣC(dis(i,k),j) (k为i子树中节点),通过C(i,j)=C(i-1,j)+C(i-1,j-1)转移. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib…
题意:给定一棵树,求$S(i)=\sum_{j=1}^{n}dist(i,j)^k$.题解:根据斯特林数反演得到:$n^m=\sum_{i=0}^{n}C(n,i)\times i!\times S(m,i)$故$S(i)=\sum_{k=1}^{m}S(m,k)\times k!\times\sum_{j=1}^{n}C(dist(i,j),k)$用$f[i][k]$表示$C(dist(i,j),k)$,通过$Pascal$公式:$C(n,m)=C(n,m-1)+C(n-1,m-1)$,用树形…
Description 传送门 给你一个n个点的树,边权为1. 对于每个点u, 求:\(\sum_{i = 1}^{n} distance(u, i)^{k}\) $ n \leq 50000, k \leq 150 $ Solution 咱们化一下式子: \(\sum_{i = 1}^{n} distance(u,i) ^ {k}\) \(=\sum_{i = 1}^{n} \sum_{j = 0}^{k} C(dis(u, i), j)* S2(k, j) * j!\) \(=\sum_{j…
$x^k=\sum_{i=1}^k Stirling2(k,i)\times i!\times C(x,i)$ 设$f[i][j]=\sum_{k=1}^n C(dist(i,k),j)$. 则可以利用$C(i,j)=C(i-1,j-1)+C(i-1,j)$,通过树形DP求出$f$. 时间复杂度$O((n+k)k)$. #include<cstdio> const int N=50010,M=155,P=10007; int n,k,i,j,x,y,S[M][M],fac[M],g[N],v[…
题意 给定一个有 $n$ 个结点的树,设 $S(i)$ 为第 $i$ 个结点的“指标值”,定义为 $S(i)=\sum_{i=1}^{n}dist(i,j)^k$,$dist(i, j)$ 为结点 $i$ 到结点 $j$ 的最小距离.请输出每个结点的指标值.($n \leq 5000, k \leq 150$) 分析 一个常用的转化 $$n^k=\sum_{i=0}^{k}S(k,i) \times C(n,i) \times i!$$ 证明可以考虑组合意义,等式的左边就是把 $k$ 个球放在…
[BZOJ2159]Crash的文明世界(第二类斯特林数,动态规划) 题面 BZOJ 洛谷 题解 看到\(k\)次方的式子就可以往二项式的展开上面考,但是显然这样子的复杂度会有一个\(O(k^2)\),因此需要换别的方法. 注意到自然指数幂和第二林斯特林数之间的关系: \[n^k=\sum_{i=0}^k \begin{Bmatrix}k\\i\end{Bmatrix}{n\choose i}i!\] 那么将答案式化简 \[\begin{aligned} Ans_x&=\sum_{i=1}^N…
[2011集训贾志鹏]Crash的文明世界 Description Crash小朋友最近迷上了一款游戏--文明5(Civilization V).在这个游戏中,玩家可以建立和发展自己的国家,通过外交和别的国家交流,或是通过战争征服别的国家. 现在Crash已经拥有了一个N个城市的国家,这些城市之间通过道路相连.由于建设道路是有花费的,因此Crash只修建了N-1条道路连接这些城市,不过可以保证任意两个城市都有路径相通. 在游戏中,Crash需要选择一个城市作为他的国家的首都,选择首都需要考虑很多…
「国家集训队」 Crash 的文明世界 提供一种不需要脑子的方法. 其实是看洛谷讨论版看出来的( (但是全网也就这一篇这个方法的题解了) 首先这是一个关于树上路径的问题,我们可以无脑上点分治. 考虑当以 \(root\) 为根时,如何计算经过 \(root\) 的路径对某一个点的贡献. 若现在我们要找经过 \(root\) 的路径中长度为 \(d\) 且路径的一端为 \(u\). 则这一部分的贡献为 \(v_{d}cnt_{d-h_u}\),其中 \(v_d=d^k\),\(h_u\) 表示点…