csp-s 模擬 12 【前瞻】

Qyun發表於2024-10-19

csp-s模擬12

T 小 h 的幾何

whk

我能說什麼呢...

T 小 w 的代數

仙人掌,DP,計數題

本題部分分較有啟發意義

  • 考慮是一棵樹怎麼做
    注意到 \(n\) 比較小,直接想想比較暴力的做法,可以用 \(O(n^2)\) 的複雜度列舉起點和終點,而由於是一棵樹,兩點之間的路徑是唯一的,並且本題要求點集不重,所以這樣就變為了序列問題,即給定一個序列,求給定起始、最終數的上升序列個數,這樣就得到了 \(O(n^4)\) 的做法。注意到列舉終點是一個比較傻的行為,這浪費掉了一些性質,即 \(DP\) 的繼承,所以列舉起點然後 bfs(或dfs) 全域性轉移。時間複雜度為 \(O(n^3)\)

  • 考慮是一棵基環樹怎麼做
    回到上一部分做法,暴力列舉起點和終點,然後發現當起點和終點都在同一棵子樹內時和上一檔無差,而起點和終點不在同一棵子樹時路徑變得不唯一,即在環上有分叉,對於現在這個做法當然也就是多列舉一遍的事,但是注意兩次轉移都會有不選環上其他的點直接選終點的轉移,而這樣的轉移實際上是多轉移了一次,用環上起點轉移一次減掉即可。還是想想怎麼 bfs 最佳化,注意到從路徑本質上是 一棵子樹 \(\to\)\(\to\) 另一棵子樹,在進入另一棵子樹前將兩條路徑的狀態合併即可。具體的,先列舉起點,當 bfs 到環上時先將環上的點全部轉移完畢再繼續,關於轉移可以正反跑兩圈,每到達一個點就將 \(O(n)\) 狀態記錄下來,這樣一個點就有正反兩個狀態,考慮合併,注意到包含了環上起點的狀態兩次,直接 \(O(n)\) 合併後 \(O(n)\) 減掉即可。
    這樣時間複雜是 \(O(n^3)\)

  • 考慮是一顆仙人掌怎麼做
    將環看作點仙人掌本質上是一棵樹,可以套用上面的做法,而環上就特殊轉移(將環上的點兩遍轉移完後再進行下一步)就行。具體的,先列舉起點,點轉移是平凡的,當到一個環上時和處理基環樹一樣正反轉移兩次、合併狀態、去重即可。
    時間複雜為 \(O(n^3)\)

T 小 y 的數論

結論題,樹論,st表

T 小j 的組合

簽到題

相關文章