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最大值 考慮如何...