description
傳送門給你乙個n個點的樹,邊權為1. 對於每個點u, 求:\(\sum_^ distance(u, i)^\)
$ n \leq 50000, k \leq 150 $
solution
咱們化一下式子:
\(\sum_^ distance(u,i) ^ \)
\(=\sum_^ \sum_^ c(dis(u, i), j)* s2(k, j) * j!\)
\(=\sum_^ s2(k,j) * j! * \sum_^ c(dis(u, i), j)\)
令\(dp[u][j] = \sum_^ c(dis(u, i), j)\)
那麼設$down[u][j] $ 表示\(i \in subtree[u]\)的解, \(up[u][j]\)表示$ i \in tree - subtree[u]$的解
那麼顯然, 根據組合數性質:$$ = + $$
\[down[u][j] = down[son][j - 1] + down[son][j]
\]\[up[x][k]=up[x][k]+up[fa][k]+up[fa][k-1]
\]\[up[x][k]=up[x][k]+down[fa][k]+down[fa][k-1]
\]\[up[x][k]=up[x][k]-down[x][k]-down[x][k-1]
\]\[up[x][k]=up[x][k]-down[x][k-1]-down[x][k-2]
\]codes
#includeusing namespace std;
#define rep(i, a, b) for(int i = (a), i##_end_ = (b); i <= i##_end_; ++i)
#define drep(i, a, b) for(int i = (a), i##_end_ = (b); i >= i##_end_; --i)
#define clar(a, b) memset((a), (b), sizeof(a))
#define debug(...) fprintf(stderr, __va_args__)
#define debug(s) debug("the massage in line %d, function %s: %s\n", __line__, __function__, s)
typedef long long ll;
typedef long double ld;
const int buf_size = (int)1e6 + 10;
struct fastio
inline char getchar()
inline void putchar(char ch)
inline int flush()
}io;
#define getchar io.getchar
#define putchar io.putchar
int read()
void write(int x)
void putstring(char s, char endchar = '\n')
#define mod 10007
#define maxn 50009
#define maxk 159
struct edge g[maxn << 1];
int n, k, head[maxn], e, fac[maxn], up[maxn][maxk], down[maxn][maxk], s[maxk][maxk];
namespace init , head[u] = e;
} void main()
s[0][0] = 1;
rep(i, 1, k)
rep(j, 1, i) s[i][j] = (s[i - 1][j - 1] + j * s[i - 1][j]) % mod;
fac[0] = 1;
rep(i, 1, k) fac[i] = fac[i - 1] * i % mod; }}
namespace solve
} }void dfs1(int u, int fa)
dfs1(v, u);
}} }
void main()
rep(i, 1, n) printf("%d\n", s[i] % mod); }}
int main()
BZOJ2159 Crash 的文明世界
這篇寫差分表和斯特林數介紹的不錯 這題就是要計算這個東西 s i j 1n dist i,j ks i j 1nd ist i,j k這個東西很難維護,我們把di st i j k d is t i,j k拆一下s u v kj 0d u,v d u,v j s u v j 0 kd u v d u...
bzoj 2159 Crash 的文明世界
又來做了一次。之前寫得實在是太差了,這次寫好點吧。這裡介紹用斯特林數展開的方法 如果不會的可以先看看這裡 我們知道xn k 0 ns n k k c x,k x n sum ns n,k k c x,k xn k 0n s n,k k c x k 因此,如果想知道答案,其實就是要知道對於每乙個k k...
BZOJ 2159 Crash 的文明世界
記得去年暑假集訓的時候本來想了乙個動態點分的做法的,然後寫道一半因為某些不知名原因就沒寫了,然後就一直放著,然後發現斯特林反演真nm好寫 首先考慮用關於冪的斯特林反演 m n sum m left times i times c m i 套上去就是 ans x sum n dis i,x k sum...