可以發現問題是$a$ $b$是否在乙個邊雙里。
對於一棵樹上的加邊操作,只要將兩個點之間的路徑上的點,新增到同乙個邊雙集合裡即可。
因為邊雙的特殊性質,加上並查集的操作,這樣只考慮樹邊的做法是正確的。
具體的實現方法實際上通過並查集+暴力跳父親就可以實現。
但是因為考試時弱智了,用的樹剖+線段樹維護並查集。
對於權值為正數,合法條件為最小的組數<=k。
對於權值為負數,合法條件為最大的組數》=k。
對於權值任意,可以嘗試理解乙個結論:合法條件為最小組數<=k<=最大組數。
將字首和離散化,然後直接通過樹狀陣列即可維護最小的組數和最大的組數。
所以直接二分答案就可以了。
實際上也與原題差不多了。
生成樹一題的做法是,將三種顏色的邊,分別視為$1$,$x$,$y$。
然後代入$n^2$組點值,二維插值可得係數,而所得$x^ay^b$項係數即選擇了$a$條顏色二邊,$b$條顏色三邊,$n-1-a-b$條顏色一邊的方案數。
對於本題,顯然可以按位處理。
乙個顯然的做法是同樣將三種邊權看作三種顏色,同樣用二維插值解決。
但是乙個更加優秀的做法是,因為本題的特殊性質(最終不關注具體的$a$,$b$),而只關注$a+2b$ $mod$ $3$的結果。
也就是說我們要得到每個生成樹方案的邊權的加和。
因為矩陣樹求的是乘積,所以只要將這個邊權放在指數上就行了。
這樣求得的多項式也變為了不到$2n$次,用一維插值就可以,總複雜度少乙個$n$。
因為一些特殊的原因,這次的分數又超過了300分。
因為一些特殊的原因,這是一道原題,題解見省選模擬4。
省選模擬104 題解
a.簽到題 把每個點向它右側比他大的第乙個點之間連邊,如果沒有那麼向 root 連邊。那麼可以構成一棵樹。特判一些情況之後,可以認為問題就是 1.給某節點和它的所有兒子節點權值加上乙個值。2.詢問一條路徑的權值和。首先考慮如果只詢問單點的維護方法,其實就是打乙個標記表示給整個兒子集合都加上了若干權值...
省選模擬102 題解
a.island 對於正負不同的情況,o n 列舉左側的位置然後計算。對於正負性相同的情況,把笛卡爾樹建出來,然後每次考慮跨過最小值的貢獻。分幾種情況 左右均不超過最小值,左右僅有乙個超過最小值,左右都超過最小值。然後順便統計上其中乙個端點為劃分點的貢獻。然後瘋狂的寫式子拆式子就沒了。做法挺簡單的,...
省選模擬101 題解
a.石子遊戲 問題可以簡單轉化為最少能取出多少個數,使得異或和為 k 顯然答案是小於 log a i 的,因為線性基已經可以拼出所有數了。所以可以考慮列舉這個答案,然後就是 dp 表示用 i 個數能否拼出 j 轉移可以用 fwt 優化,暴力做就是兩個 log 的,因為只需要一項所以手動 ifwt 可...