Codeforces 1338 题解
A
對于每個 \(i\) 我們求出 \(b_i\) 表示 \(i\) 這個數(shù)最少要增加多少(\(\max^i_{j=1}a_j-a_i\)),答案等于最小的 \(k\) 使得 \(2^k-1\ge \max^n_{i=1}b_i\).
時間復(fù)雜度 \(O(n)\).
代碼: 76336034
B
最小:只要存在兩個葉子距離為奇數(shù),答案就是 \(3\),否則是 \(1\).
最大:等于非葉子節(jié)點數(shù)加上和至少一個葉子節(jié)點相連的非葉子節(jié)點數(shù) \(-1\)。顯然和同一個點相連的葉子邊權(quán)必須相等。那么考慮去掉葉子節(jié)點后剩下的樹,由于你可以安排任意大的數(shù),所以一定能做到邊權(quán)互不相同。
時間復(fù)雜度 \(O(n)\).
代碼: 76352259
C
找規(guī)律即可。打表前 \(16\) 位不難發(fā)現(xiàn)就是先四進制分解,由 \(\mod 3\) 的值得到答案的最高位,剩下的每一位做個置換。
歸納證明應(yīng)該不難。
聽說這個規(guī)律還和 nim 積有關(guān)。
時間復(fù)雜度 \(O(\log n)\).
代碼: 76377989
D
我的做法還是找規(guī)律(然而腦速太慢賽后搞了一上午)。找規(guī)律的過程非常麻煩,實在不太會講,直接說一下結(jié)論好了:
設(shè) \(f[u][0/1]\) 表示 \(u\) 點的子樹內(nèi),被根包含/不被根包含的最大層數(shù)。需要 \(0/1\) 是因為把根套在外面之后,僅僅能套住那些不被根的兒子包含的圈,而需要和根的兒子相交。這也就意味著,一個子樹的狀態(tài)可以表示為兩個相交的圈,其中較大的一個是根,另外一個不是根。
假設(shè) \(u\) 有若干兒子 \(v_1,v_2,...,v_{sonn[u]}\). 那么最優(yōu)方案一定會套成如下所示,藍色的是 \(u\),黑色和紅色分別是每個兒子的根 (\(0\)) 和非根 (\(1\)).
于是可以得到這樣的方程:
再考慮 \(f[u][0]\) 的轉(zhuǎn)移,顯然有
\[f[u][0]=\max_i f[v_i][1]+1 \]換根 dp 即可。
時間復(fù)雜度 \(O(n)\).
比較有道理的做法見 \(\color{black}{\text{s}}\color{red}{\text{uwakow}}\) 神仙的題解: https://www.cnblogs.com/suwakow/p/12692393.html
代碼: 76449398
E
題解: https://www.cnblogs.com/suncongbo/p/12779107.html
總結(jié)
以上是生活随笔為你收集整理的Codeforces 1338 题解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces 1336E Chi
- 下一篇: 【学习笔记】关于正整数除法下取整和上取整