考慮現在要通過藍邊刪掉紅邊。
其實等價於要找出有哪些紅邊,滿足恰好只有乙個端點在藍邊的兒子方向子樹中。
考慮對藍樹跑出乙個 $dfs$ 序來,那麼問題轉化為恰好乙個端點在給定區間中。
這像是乙個二維偏序問題。考慮以線段樹下標為其中的第一維,第二維進行排序處理。
然後用乙個 $set$ 就可以簡單維護了,但是這樣做的複雜度是兩個 $log$ 的。
考慮乙個特殊的操作,開兩棵線段樹,第一棵以連線兩個點中小的 $dfs$ 序為下標,大的為權值,第二棵則相反。
那麼問題就轉化為取一段字首或字尾了,因為本題只需要每個邊操作一次,用單調指標就可以維護了。
顯然要搞乙個點分治。然後只要統計經過當前分治父親的路徑。
然後就是常見的我想不到的。
發現從分治父親到乙個子孫的路徑合法的條件是,路徑權值的總和是路徑上的最值。
而出現次數就是這個最終出現的次數,兩條路徑配對的條件是總和互為相反數。
把這些東西都處理出來,發現問題是個卷積。
但是直接分析複雜度似乎是三個 $log$ 的。
考慮如果說對於乙個權值和出現的子孫個數為 $t$,那麼多項式的級數也是 $t$ 級別的,因為次方數增加 $1$ 至少導致節點數增加 $1$。
所以直接做乙個 $fft$ 優化一下卷積就結束了。
乙個結論,考慮最終被選上的數含有的質因子不超過兩個。
並且如果質因子個數為 $2$,那麼一定可以表示為$p_1^k*p_2$,其中 $p_1 \leq \sqrt n,p_2 > \sqrt n$。
有了這個結論,可以發現把質因子按照是否大於 $\sqrt n$ 分在二分圖的兩部分,直接跑乙個最大費用可行流就可以解決問題。
然而這個玩意跑的有點慢,所以過不去。
考慮乙個優化,首先分別令每個質因子統計一下答案,然後只把能夠增廣的邊建出來就完事了。
省選模擬104 題解
a.簽到題 把每個點向它右側比他大的第乙個點之間連邊,如果沒有那麼向 root 連邊。那麼可以構成一棵樹。特判一些情況之後,可以認為問題就是 1.給某節點和它的所有兒子節點權值加上乙個值。2.詢問一條路徑的權值和。首先考慮如果只詢問單點的維護方法,其實就是打乙個標記表示給整個兒子集合都加上了若干權值...
省選模擬102 題解
a.island 對於正負不同的情況,o n 列舉左側的位置然後計算。對於正負性相同的情況,把笛卡爾樹建出來,然後每次考慮跨過最小值的貢獻。分幾種情況 左右均不超過最小值,左右僅有乙個超過最小值,左右都超過最小值。然後順便統計上其中乙個端點為劃分點的貢獻。然後瘋狂的寫式子拆式子就沒了。做法挺簡單的,...
省選模擬101 題解
a.石子遊戲 問題可以簡單轉化為最少能取出多少個數,使得異或和為 k 顯然答案是小於 log a i 的,因為線性基已經可以拼出所有數了。所以可以考慮列舉這個答案,然後就是 dp 表示用 i 個數能否拼出 j 轉移可以用 fwt 優化,暴力做就是兩個 log 的,因為只需要一項所以手動 ifwt 可...