TCL 電子:吳吉宇因其個人事務辭職,張少勇擔任執行長
-
狀態轉移方程
f[i][]表示i這棵子樹怎樣的最優解
-
用子樹更新父親
-
一個一個子樹的更新父親(樹上揹包)
-
計算完所有子樹再更新子樹
-
題型1:子樹與計數
統計子樹和,通過加減一些子樹滿足題目中的某些性質
-
統計以每個點為根的子樹和,合併時遇到一個子樹和為\frac{sum}{3}的節點就記錄下來。
-
統計每個點的子樹和,cut陣列標記刪除。統計的時候每個節點都統計一次。
題型2:樹形揹包問題
一般是讓求在樹上選一些點滿足價值最大的問題
f[i][j]表示i這棵子樹選j個點的最優解
-
-
可能為一棵森林,新增0節點,使其變成一棵樹。
-
f[i][j]表示在i及其子樹中選j門課的最大得分。
-
分組揹包模型,對於一個節點x,有\left | son(x) \right | 組物品,每組物品有t-1個,第i組的第j個物品的體積為j,價值為f[y_i][j],揹包的總體積為t-1。
-
-
-
-
f[i][j]表示在i及其子樹裡滿足j名使用者的最大收益。
-
統計答案時逆序列舉i,如果有f[1][i]大於等於0,則輸出i。
-
-
題型3:花費最少的費用覆蓋所有點
父親與孩子有聯絡
1.選父親必須不能選孩子(強制)
2.選父親可以不用選孩子(不強制)
-
-
屬於第二類
-
1.用x這個點覆蓋x
-
2.用x的兒子節點y覆蓋x
-
3.用x的父親節點fa覆蓋x
-
-
分別用f[x][0],f[x][1],f[x][2]表示以x為根的子樹中的所有點全部被覆蓋,x的被覆蓋狀態分別上面的第1,2,3種狀態。
-
f[x][0]+=min(f[y][0],f[y][1],f[y][2])+val[x]
x已經被自己覆蓋了,y既可以被自己或自己的兒子覆蓋,也可以被x覆蓋。
-
f[x][1]+=min(f[y][0],f[y][1])
x已經被兒子節點覆蓋了,y可以被自己或自己的兒子覆蓋,但是不能被父親覆蓋。
當選擇的全部是f[y][1]時,要加上min(f[y][0]-f[y][1])
x要被自己的兒子覆蓋,但是x的所有兒子y都是被它的兒子所覆蓋的,其實是沒有兒子節點覆蓋y的。此時要選一個最小的差值min(f[y][0]-f[y][1]),強行使一個兒子節點選自己來覆蓋x。
-
f[x][2]+=min(f[y][0],f[y][1])
x已經被父親節點覆蓋了,y可以被自己或自己的兒子覆蓋,但是不能被父親覆蓋。
-
-
-
-
樹的最大獨立集,屬於第一類
-
f[i][0]:在i這棵子樹中,不選i的最大快樂指數。
f[x][0]+=max(f[y][1],f[y][0])
-
f[i][1]:在i這棵子樹中,選擇i的最大快樂指數。
f[x][1]+=f[y][0]
-
-
-
-
樹的最大獨立集+判斷方案是否唯一
-
f[i][0/1]:在i這棵子樹中不選/選i的最大人數
g[i][0/1]:在i這棵子樹中不選/選i的方案是否唯一,g[x][0]為0表示方案唯一,為1表示不唯一。
-
f[x][1]+=f[y][0],g[x][1]|=g[y][0]
-
f[x][0]+=max(f[y][1],f[y][0])
-
f[y][1]==f[y][0] g[x][0]=1
已經有兩種方案了。
-
f[y][1]>f[y][0] g[x][0]|=g[y][1]
-
f[y][0]>f[y][1] g[x][0]|=g[y][0]
-
-
-
題型4:樹上統計方案問題
給一個條件,問有多少個點的集合滿足這樣的條件。
運用乘法原理,控制一個點不動,看它能做多少貢獻
to be continued……
題型5:與其它演算法結合&&大模擬
-
-
把題目中的要求變成公式。
-
mindep[i]表示i子樹中最淺的玩具的深度
maxdep[i]表示i子樹中最深的玩具和深度
dep[i]表示節點i的深度
-
f[i]表示i這棵子樹中構成滿足條件的玩具所需的運算元。
合併時,f[x]=f[toy[1]]+f[toy[2]]+((mindep[toy[1]]<maxdep[toy[2]])?1:0)。
-
n是杆的數量,不是玩具的數量……多開幾倍空間
-
to be continued……
-
參考: