HNOI 2015 解題報告

2022-05-12 10:48:14 字數 1970 閱讀 3641

by tuifei_oier

完成了 2015 年的 6 題後,決定寫一篇解題報告記錄一下各個題的做法和值得積累的 tricks。

按我心情排序。

這一年總體上考察兩個方面:dp (x3) 與 資料結構 (x2)。

考察點:點分樹。

首先構建出點分樹,對每個點用資料結構維護管轄區域內所有點到自己以及點分樹父親的距離(年齡作為下標)。

比較模板的點分樹,偏考察知識點。

考察點:拓撲排序、貪心。

為了滿足所求序列應在合法的前提下字典序盡可能小的要求,轉化為建反圖求字典序最大的拓撲序,這種簡單的貪心變換可以積累一下。

考察點:整體二分+掃瞄線

考慮怎麼計算包含關係,不難發現就是兩種情況:

給定路徑的端點沒有祖先關係,則包含它的路徑一定滿足:端點分別在給定路徑端點的兩個子樹內。

給定路徑的端點有祖先關係,則包含它的路徑一定滿足:端點乙個在下端點子樹內,乙個在上端點其他子樹中。

如果把點拍到 dfs 序上去,兩種情況可以被表述為:

給定路徑端點 \(a,b\),則:\(l_a\le l_u\le r_a,l_b\le l_v\le r_b\)。

\(l_b\le l_v\le r_b,1\le l_u或 \(l_b\le l_v\le r_b,r_c。

其中,\(c\) 為 \(a\) 的兒子且 \(b\) 在 \(c\) 子樹中。

兩種情況都是乙個矩形的形式,相當於修改矩形內所有的詢問點。

考慮對所有詢問整體二分,每次用掃瞄線處理所有矩形和詢問即可。

考察點:dp+期望/概率

首先考慮求每張牌的期望傷害,即每張牌的發動概率。

然後,對於求每張牌的發動概率,由於對於第 \(i\) 張牌,每一輪中一旦使用了 \([1,i-1]\) 中任意一張牌後都不會考慮第 \(i\) 張牌,因此我們需要 dp 來考慮這個問題。

關鍵的狀態在於前面的牌中發動了幾張牌,因此我們設 \(dp_\) 表示前 \(i\) 張牌在所有的 \(r\) 輪中有 \(j\) 張被發動過的概率,不難推出轉移方程。

考慮再用這個求出每張牌被發動的概率,就解決了這個問題。

考察點:dp+組合計數

首先給定的圖實際上構成森林,拓撲排序判無解即可。

接下來考慮每個連通塊的答案,用樹形 dp 來統計。

由於等號的存在,考慮設 \(dp_\) 表示以 \(i\) 為根的子樹最終構成的序列中有 \(j-1\) 個小於號的方案數。

考慮揹包轉移,列出轉移方程為 \(dp_\gets dp_\times dp_\times \binom\binom\)。

合併時,看成是先考慮 \(dp_\) 中去除掉 \(x\) 後剩餘的 \(j-1\) 段在 \(dp_\) 中去除掉 \(x\) 後的 \(i-1\) 段中的位置,即 \(\binom\),再考慮把 \(dp_\) 中的剩餘部分與其合併。

考察點:dag+dp

考慮 dag 的外向生成樹計數,相當於對於每個點選擇乙個父親,於是答案即為 \(\prod\limits_^nin_i\),其中 \(in_i\) 為 \(i\) 的入度。

考慮加入一條邊後發生了什麼:我們直接用上面的式子計算可能會恰好選擇乙個環上所有點的父親都為它在環上的前驅的情況,考慮減掉這些不合法的情況。

相當於對於乙個環 \(a_1,a_2,...,a_k\) 我們先欽定每個點的父親就為它在環上的前驅,其他點父親隨便選,即:

\[f_x=\dfrac^n in_i}^kin_}

\]不難發現這樣不會算重也不會漏算,則答案為 \(\prod\limits_^nin_i-\sum f_x\)。

顯然不應該對每個環算一次 \(f_x\),由於所有環都是因為邊 \(s-t\) 產生的,因此我們只需考慮從 \(t-s\) 的每一條路徑並計算這條路徑上的 \(f_x\) 值的和,建反圖後 dag 上 dp 即可。

總體上說,這一年的考點重複性還是比較高的,特別是 dp 與拓撲序多次出現,在之後的幾年裡就鮮有這種情況了。而從題目難度來說,也沒有近幾年的題難度大,比較適合練習與提公升,學習一些經典的套路和技巧。

HNOI2015 實驗比較

description input output sample input 5 4 1 2 1 3 2 4 1 5 sample output 5data constraint 首先對於給出的等於條件,我們可以直接把點合併。對於合併後的圖,我們發現要麼是環,要麼是樹,環則直接無解,樹我們可以用樹形d...

HNOI2015 實驗比較

description input output sample input 5 4 1 2 1 3 2 4 1 5 sample output 5data constraint 首先對於給出的等於條件,我們可以直接把點合併。對於合併後的圖,我們發現要麼是環,要麼是樹,環則直接無解,樹我們可以用樹形d...

HNOI2015 開店 題解

目前只有開o2能過,stl的常數太大了,qwq 題意簡述,給你一棵樹,有點權與邊權,然後有很多詢問,每次詢問你點權在l r l r範圍內的點到給點點v v的距離之和。我們使用動態點分治來求取答案。先構建出點分樹,樹高肯定是在log nlog n級別內的,然後對於乙個分治點 重心 我們在上面記錄三個值...