2021.10 好題
https://www.luogu.com.cn/training/2018
Avoid Rainbow Cycles
https://www.luogu.com.cn/problem/CF1408E
用最小代價刪除 \(\to\) 用最大代價保留
我們佈置一張新的星圖,有 \(n\) 個流星,代表著 \(n\) 個集合。如果元素 \(x\) 出現在 \(i\) 號集合,那麼將 \(x\) 號星辰和 \(i\) 號流星相連價值為 \(x+b_i\) 的無向絲線。
此時此刻,仰望星空,發現如果嶄新星圖亦有天體之環,那麼舊圖也將對應有環。所以讓我們精簡星圖,細剪連線,求出最大生成樹,即可。
Xor Tree
https://www.luogu.com.cn/problem/CF1446C
整活題解
那是代代相傳的處事真言:“如果不能剷除更多不如意,不如去保留更多的幸福。”
將每個數字代表的點化作星斗,那麼仰望星空,星圖上最多會有 \(n\) 條輕靈絲線。而我們需要遮蔽掉儘量少的星斗,也就是讓儘量多的星斗照耀,使得有且僅有一對星斗——牛郎織女星 \((i,j)\),互相都有 \(a_i\ \text{xor}\ a_j\) 為它們的最小值。依此法做,\(i\) 會指向 \(j\),且 \(j\) 會指向 \(i\),雙向奔赴,絲線重合,星圖上只有 \(n-1\) 條絲線,我們仰頭探望,便是樹狀星辰。
想到 \(\text{xor}\),思想的平原上便生長出一棵茂盛多枝的字典樹,而神妙的肥料就是我們插入的星斗數值 \(a_i\)
那麼,刻畫的數字 \(f_x\) 滿足以下規律:如果 \(f_x\) 沒有左向的枝丫,那麼 \(f_x\) 就是右向的枝丫刻畫的數字;如果 \(f_x\) 沒有右向的枝丫,那麼 \(f_x\) 就是左向的枝丫刻畫的數字。
儘管如此,如果 \(x\) 既有左向的枝丫,又有右向的枝丫,那麼該如何是好?不要慌張,不要大意,我們僅需令 \(f_x\) 等於左向的枝丫刻畫的數字與右向的枝丫刻畫的數字的極大之值,再加上恆本之 “\(1\)” 即可。原因如下,如果左向枝丫、右向枝丫各只對應一個星斗數值,分別為 \(a_i,a_j\)
正經題解
刪除最少 = 保留最多。
要使有且僅有一對 \((i,j)\),使得 \(a_i\text{ xor } a_j\) 是互相的最小值,這樣它們的邊就會重複。建立字典樹,設 \(f_x\) 為處理到字典樹點 \(x\) 的時候最多可以保留多少個數字。
\[f_x=f_{lson} , \text{ if no rson}\\ f_x=f_{rson} , \text{ if no lson}\\ f_x=\max(f_{lson},f_{rson})+1,\text{ otherwise} \]最後一個轉移方程的意思是,如果左兒子 \(f\) 更大,那麼就保留左兒子。右兒子不可以選兩個以上,因為這樣就不止一對合法的 \((i,j)\)(左兒子中有,右兒子也有)。但是右兒子可以選一個,因為右兒子與左兒子的任意一個的 \(x_{dep}+1\) 位不同,肯定不會是互相的最小值(左兒子間的 \(x_{dep}+1\) 位是 0)。右兒子 \(f\) 更大,同理。
Happy New Year
https://www.luogu.com.cn/problem/CF1313D
發現 \(k\le 8\)。對於很小的資料,題解,居然,想到,狀壓!
採用掃描線的思路,將區間們化作很多個端點們。設 \(f_{i,S}\) 為在第 \(i\) 個端點,包含這個端點的 \(k\) 個區間是否選擇的狀態,然後 dp 即可。到時候打程式碼的時候具體想想轉移方程。
Divide Square
https://www.luogu.com.cn/problem/CF1401E
發現答案貢獻來自兩個:
- 直接將矩形劈成兩半的線段數量 \(A\)。
- 線段間交點數量 \(B\)。(每多一個交點,就會多一個矩形)
\(ans=A+B+1\)。
重點在於計算 \(B\)。將橫向線段當做修改,縱向線段當做查詢,樹狀陣列即可。
Edge Weight Assignment
https://www.luogu.com.cn/problem/CF1338B
構造題,從點到根的所有邊入手。
Two Different
https://www.luogu.com.cn/problem/CF1408F
手操發現,答案似乎是:第一次 2 的倍數,第二次 4 的倍數……
題解上說遞迴 \((1,n)\) 分為 \((1,k),(k+1,n)\) 操作即可,其中 \(\log k\in \mathbb Z\)。
Stoned Game
https://www.luogu.com.cn/problem/CF1396B
我考慮到,如果有一堆比其它所有堆之和還要多,那麼先手必贏。
然後就不會了2333。
題解是這樣說的,如果沒有上面的情況,那麼兩人輪流走,採取最優策略,是不會使得上面的情況發生的。模擬一下可知,如果一堆很多了,那麼肯定會去取這一堆,保障沒有讓對手必贏的情況。於是最後肯定會把石頭全部取完,判斷總石子奇偶性。
Chess Strikes Back
https://www.luogu.com.cn/problem/CF1379F1
https://www.luogu.com.cn/problem/CF1379F2
\(2n\times 2m\)?\(n\times m\)?
於是我們把棋盤劃分為許多個 \(2\times 2\) 的小矩陣。這些小矩陣必定是左上角和右下角白色。將矩陣分為四類:
- 兩塊都沒有被挖掉。
- 兩塊都有被挖掉。
- 左上被挖,右下保留。
- 右下被挖,左上保留。
如果小矩陣 3 的右下方有小矩陣 4(準確來說,如果小矩陣 3 座標 \((a,b)\),小矩陣 4 座標 \((x,y)\),那麼 \(a\ge x\ \and\ b\ge y\)),那麼就不合法了。
用線段樹維護 3 的最左位置和 4 的最右位置即可。