p7581 「rdoi r2」路徑權值(distance)
考慮離線詢問,掛到節點上,然後從下往上維護答案.
首先對於每個節點 \(u\) 預處理乙個路徑權值字首和 \(\mathrm[u]\),那麼兩個點的距離就是 \(\mathrm[u]+\mathrm[v]-2\ \mathrm[\mathrm(u,v)]\).
對於當前子樹的每個深度 \(k\) 維護乙個 \(\mathrm_k\) 表示 \(\sum_[u]=k}\mathrm[u]\), \(\mathrm_k\) 表示深度為 \(k\) 的節點數量,\(\mathrm_k\) 表示答案.
合併兩棵子樹 \(u,v\) 時,設他們的父親為 \(w\) 兩棵子樹內部的答案已經統計過了,所以只需要加上經過 \(w\) 的路徑的答案就好.
左子樹的乙個深度為 \(k\) 可以和右子樹任意乙個深度為 \(k\) 的節點構成一條路徑,所以它貢獻了 \(v.\mathrm_k\) 次,右子樹中的節點同樣.
注意要減去 \(w\) 的貢獻.
\[w.\mathrm_k=u.\mathrm_k+v.\mathrm_k+(u.\mathrm_k-u.\mathrm_k\times \mathrm[w])\times v.\mathrm_k+(v.\mathrm_k-v.\mathrm_k\times \mathrm[w])\times u.\mathrm_k.
\]時間複雜度 \(o((n+q)\log n)\).
程式設計題記錄
1.給出乙個字串 a,表示乙個 n 位正整數,刪除其中 k 位數字,使得剩餘的數字仍然按照原來的順序排列產生乙個新的正整數。找到刪除 k 個數字之後的最小正整數。n 240,k n class solution for auto c str sk.push c else i while sk.emp...
演算法題記錄
1.給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。法一 時間複雜度o n 2 空間複雜度o n var twosum function nums,targ...
備戰NOIP每週寫題記錄(一) 不間斷更新
recorded by ksq2013 其實這段時間寫的題遠遠大於這篇博文中的內容,只不過那些數以百記的基礎題目實在沒必要寫在blog上 week one a bzoj4034 haoi2015 t2 樹鏈剖分 線段樹 b luogu1328 noip2014 t1 生活大 版石頭剪刀布 模擬 c ...