省選模擬34

2022-03-26 19:56:15 字數 814 閱讀 8938

t1想到暴力貪心,然後猜了乙個性質,詢問排序繼承刪掉的點,用線段樹優化,肝了好久然後拍偽了。。。最後快讀還沒有開ll然後爆零。。。

然後乙個小時三道題來回看

最後t2有思路,還剩乙個小時,瘋狂碼碼碼拍拍拍,由於生成的資料k太大過水,以為ac了。。。

t3真的算棄了。。。

t1對於\(a_i<0\)的情況,順序沒有影響,排序後貪心。

對於所有情況,可以倒序貪心維護乙個大根堆。

如果\(a_i>0\),那麼用\(a_i\)去不斷抵消堆頂

否則圧堆。

最後彈堆得到負數序列,和\(a_i<0\)同理

t2這個有點像模擬題。

按\(a\)從大到小排序,那麼最終的點一定是 \(a_i=x\)的一部分+\(a_i>x\)的所有點

以不同權值分段,如果本段可以更新答案,那麼本段的點一定把之前段的連通塊全部連線,這個判斷可以用並查集。

當之前段現在所在連通塊的大小<=k時,可以直接更新答案。

>k時要考慮段內的答案的下界,也就是連通之前段的最少總點數,這個可以暴力dfs,容易知道只會計算一次。

注意要特判第一段。

t3考慮起點和終點,可以推出答案是2*邊權和-直徑

點集的生成樹的二倍邊權和有個結論,為排序後相鄰兩兩dis+首尾dis,可以畫圖理解下

動態直徑求法很多,可以線段樹分治、線段樹維護括號序列(進為(,出為),答案為max(dfs序上消不掉的括號間距離和))、dfs序上線段樹維護直徑端點合併

我寫的最後乙個,每個節點存區間內存在的直徑的兩個端點,合併從子區間4個點中選最長路徑。

用尤拉序求\(lca\),可以做到\(o(nlogn)\)

省選模擬34

考慮貪心,首先如果某個位置的權值小於0,並且前面能夠抵消掉,那麼他就不會對前面產生影響。所以說,從後向前掃一遍,將負權值塞入堆中,用大根堆維護當前是否可以刪掉堆頂元素。最後將詢問離線,掃一遍即可。似乎是個亂搞題?我的做法是,對於每種權值,維護當前能夠加入聯通塊的所有點,再維護每種權值當前在聯通塊中的...

省選模擬34

然後再線段樹分治一下 code include define int long long overflow memory limit define rint signed define lson rt 1 define rson rt 1 1 define inf 0x3f3f3f3f3f3f3f3...

省選模擬 19 09 11

ps.博主趁資訊課摸魚考的暴零模擬 看門人憑感覺就知道是長鏈剖分,將路徑查分一下,dis u di sv 2 dis lc adis u dis v 2 dis disu disv 2 disl ca 維護fu,if fu,i 表示u的子樹,深度為 i 的點的 dis disdi s最大值 考慮如何...