2021.10做題記錄
阿新 • • 發佈:2021-10-03
P5243 [USACO19FEB]Moorio Kart P
考慮容斥,先把可能的算出來,然後再算 \(<Y\) 的
第一部分就直接把所有邊權枚舉出來乘一乘
\(<Y\) 的不難發現可以 dp
但是樸素的 dp 是 \(\mathcal O(n^3)\) 的
因此考慮根號分治
對於 \(n_i\leq \sqrt Y\) 的,這樣的我們列舉每一個不同的邊的長度,複雜度為 \(\mathcal O(n_i^2Y)\)
對於 \(n_i > \sqrt Y\) 的,這樣的最多隻有 \(\sqrt Y\) 個,複雜度為 \(\mathcal O(Y^2\sqrt Y)\)
第一類,根據均值不等式,所有 \(n_i\)
於是這道題目就愉快的在 \(\mathcal O(Y^2\sqrt Y)\) 的時間裡解決了
但是一個坑點是邊權可能為 0,所以判斷的時候可能會出問題,因為這個調了一個多小時
CF1580D
發現這個式子長得特別奇怪,拆一下變成 \(\sum a_{b_i}+a_{b_j}-2a_k\)
建出一棵笛卡爾樹,這個 \(a_k\) 就是他們的 lca
直接樹形 dp
\(\mathcal O(n^2)\)
CF1580B
這個東西本質上是深度為 \(k\) 的點恰好又 \(m\)
所以直接 dp,\(f[i][j][d]\) 表示 \(i\) 個點 \(j\) 個深度為 \(k\) 的點,當前深度為 \(d\)
答案是 \(f[n][m][1]\)