TJOI2015 Day2解題報告

2021-07-02 14:10:30 字數 773 閱讀 1645

在一棵n<=10^5的樹上要求支援:①從a點走到b點,求最大的value[j]-value[i],其中i,j是點,i在路徑中出現的位置先於j。②將a~b路徑上每個點的value加上v。

自然可以用樹鏈剖分/lct做。每一段區間存四個數:①「後減前」型的最大值fmx,②「前減後」型的最大值bmx(這是由於有時候區間可能會被翻轉),③最大值mx,④最小值mn。合併時的思路是這樣的:合併區間的fmx要麼是max(a.fmx,b.fmx),要麼是b.mx-a.mn。它們分別對應於沒有跨越mid和跨越了mid這兩種情況。bmx同理。

樹鏈剖分的具體細節十分複雜,調了半天。

這道題的題面比較坑:它是從0開始編號的,也就是說棋子是站在中間那一行,能打到上面那一行和下面那一行。所以某一行的棋子放置只和相鄰行有關。而每一行一共至多2^m(不超過64)種放法,也就是說可以預處理出來轉移矩陣:d[i][j]=1代表上一行為i時下一行可以為j。然後用矩陣快速冪搞即可。

先寫個n^2的70分暴力。算出兩個陣列:statesum[i]代表有i個節點的樹共有多少種,sonsum[i]代表所有不同情況中的葉子節點個數之和。那麼i個節點的樹的答案自然就是sonsum[i]/statesum[i]。把暴力打的表全部輸出,可以發現statesum[i]就是卡特蘭數c[i],而sonsum[i]一定是i的倍數。多少倍呢?也是卡特蘭數,確切的講是c[i-1]。那麼n個節點的樹,答案就是n*c[n-1]/c[n]。把卡特蘭數的通項公式代進去,答案就是n*(n+1)/(2*(2n-1))。

具體的證明十分複雜,需要求出生成函式,然後用廣義二項式定理求係數,然後再用積分求另外乙個係數。

TJOI2015 day1解題報告

的編輯器真的是太蛋疼了 想用tex然後上jpg又貼不了鏈結,真的很糾結啊 t1 tjoi2015 線性代數 描述 戳上面吧 首先這道題我覺得是這套題最漂亮的一道題了 雖然說學校的題庫裡居然有一道和這個一模一樣的 首先我們可以先把那個式子轉化為 其中b i 是表示矩陣a中第i行為0或為1,然後就有兩種...

NOIP 2015 Day2 解題報告(全面)

stone.cpp c pas 一年一度的 跳石頭 比賽又要開始了!這項比賽將在一條筆直的河道中進行,河道中分布著一些巨大岩石。組委會已經選擇好了兩塊岩石作為比賽起點和終點。在起點和終點之間,有 n 塊岩石 不含起點和終點的岩石 在比賽過程中,選手們將從起點出發,每一步跳向相鄰的岩石,直至到達終點。...

TJOI2015 組合數學 解題報告

這不是個貪心嗎?怎麼都最小鏈覆蓋 最大點獨立集去了 注意到乙個點出度最多只有2,可以貪心一下出度的去向 按讀入順序處理就可以,維護乙個 res i 陣列,表示上一行第 i 列可以流給下面那個格仔的次數,然後如果當前這個格仔不夠用,從右往左把所有的還有次數的 res 拿過來給當前格仔用就可以了。考慮這...