1. 程式人生 > >NOI 模擬賽

NOI 模擬賽

歐拉 rdquo hnoi 枚舉 線段樹 http href 主席樹 空間

T1 HNOI2015 實驗比較

給 $n$ 個有權值的物品,$m$ 條消息,消息可以是“小於”或者“等於”,一個物品只會與一個小於等於它的東西比較,求最後權值排名方案數 mod 998244353

$n \leq 500$

sol:

考場上自閉了,考出來更自閉

相等的節點縮起來,是一個森林,你要做的是給這個森林編號,要求兒子的編號小於父親的,求方案數

然後 dp 就完事了,$f_{(x,i)}$ 表示 $x$ 為根的子樹劃分成 $i$ 個編號的方案數,合並兩個子樹實質上是合並兩個編號序列搞個 $g_{(i,j,k)}$ 表示把 $i$ 個編號和 $j$ 個編號的序列合成 $k$ 個編號的序列的方案數,一起轉移即可

T2 bzoj3681 Arietta

甚至剛做過

T3 bzoj3772 精神汙染

給一棵樹,給 $m$ 條路徑,隨機選兩條編號不同的,求一條包含另一條的概率

$n,m \leq 100000$

sol:

考場上想的是開個 vector 記錄每個左端點的右端點都是啥,然後對歐拉序建主席樹,每次把當前點掛的所有右端點差分成入棧 +1,出棧 -1

然後枚舉每一條路徑,定位到每條路徑對應的線段樹,分別查 $x->lca$,$y->lca$,$lca->lca$ 的和最後 $-1$ 就可以了(因為歐拉序好像不太滋磁直接查一條不是祖孫鏈的路徑)

這個東西常數奇大,空間還卡,滿數據 1.2s 而且沒啥可優化的了

後來發現數兩個矩形裏的點就可以了

不過調 4K 的代碼還是挺爽的

一下午寫了 10K,去世

NOI 模擬賽