洛谷:
套路題,直接上斯特林數把指數搞成組合數:
\[\begin
s(i)&=\sum_^d(i,j)^k\\
&=\sum_^\sum_^s_2(k,t)\binomt!\\
&=\sum_^ks_2(k,t)t!\sum_^\binom
\end
\]注意到\(k\)很小,我們考慮\(dp\),設後面一塊為\(f\),並且只運算元樹的貢獻,即:
\[\beginf_&=\sum_\binom\\&=\sum_\binom+\binom\\&=\sum_f_+f_\end
\]然後同樣的思路做一遍二次換根就好了。
複雜度\(o(nk)\)。
#includeusing namespace std;
void read(int &x)
void print(int x)
void write(int x)
#define lf double
#define ll long long
#define pii pair#define vec vector#define pb push_back
#define mp make_pair
#define fr first
#define sc second
#define for(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++)
const int maxn = 5e4+10;
const int inf = 1e9;
const lf eps = 1e-8;
const int mod = 1e4+7;
int f[maxn][160],g[maxn][160],n,k,s[160][160],fac[maxn],ifac[maxn],inv[maxn];
int head[maxn],tot,r[160];
struct edgee[maxn<<1];
void add(int u,int v) ,head[u]=tot;}
void ins(int u,int v)
void prepare()
void dfs(int x,int fa)
}void dfs2(int x,int fa)
for(int i=head[x];i;i=e[i].nxt) if(e[i].to!=fa) dfs2(e[i].to,x);
}int main()
return 0;
}
P4827 國家集訓隊 Crash 的文明世界
求出對於樹上每個點 x 的 sum ndis x,u k 所有邊長為 1。根據斯特林反演 m n sum n beginn j endc m jj 可以得到 sum n sum begink j endc jj sum begink j endj sum nc j sum begink j endj...
國家集訓隊 旅遊
題目背景 ray 樂忠於旅遊,這次他來到了 t 城。t 城是乙個水上城市,一共有 nn 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說,t 城中只有 n 1n 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人心...
國家集訓隊 Tree I
題目 給你乙個無向帶權連通圖,每條邊是黑色或白色。讓你求一棵最小權的恰好有nee dneed need 條白色邊的生成樹。題目保證有解。思路 凸優化裸題,要注意的就是,優先選白色 優先選黑色也行 主要是同一斜率可能會切到很多點,那麼就要有乙個標準,要麼選最小點,要麼選最大。另外求出來的點不一定是ne...