1. 程式人生 > 其它 >Codeforces Round #747 (Div. 2)題解

Codeforces Round #747 (Div. 2)題解

謝天謝地,還好沒掉分,還加了8分,(8分再小也是加啊)前期剛開始有點卡,不過在盡力的調整狀態之後,還是經前面的水題過完了,剩下的E2和F題就過不去了,估計是能力問題,自己還是得認真補題啦。

E2. Rubik's Cube Coloring (hard version)

這個題是在上一題的基礎上,簡單題的就很簡單,一個完全二叉樹,每個點都沒有染色,求不同染色方案的方案數。顯然的是在第一個點的顏色確定後,後面所有點的顏色都只有4種選擇,也就是無論父節點選了什麼顏色,該節點都有且僅有四種選擇。所以答案就是\(6*4^{n-1}\).那麼作為困難版的,這個題就是給某些點已經染上了顏色,要求所有的方案數。顯然上一題的簡單思路不能解決這個題了,因為我們似乎不能將所有的點都割裂開了。考慮這個例子,一個節點的父節點和子節點都以前提前被染過色了,那麼該節點的顏色選擇就依賴於父節點和子節點的顏色。像這種題,肯定存在一些性質,或者說我們沒有找到顏色之間限制的本質。考慮這樣一個事情,就像簡單題的那個例子,若一顆樹,其根節點確定後,那麼顏色的方案數就是\(4^{n-1}\)

,那麼考慮在有一些點被提前確定顏色的樹上,我們能不能用上這個結論,我們先找到這棵樹上的所有符合條件子樹,他們的所有節點都沒有被確定顏色。那麼對於這些節點,他們的根節點的顏色可能有限制,但他們非根節點的顏色方案數就是4,我們用最樸素的思路,採取dp的思路,某些點上必須採用dp的方式才能解決顏色限制的問題,但有些子樹,所有節點都沒被提前染色,他們的方案數就能快速計算。觀察題目資料,有顏色的點是\(2000\),考慮一個有顏色的點最多使多少個點必須用dp的方式,顯然是n,那麼總的dp的狀態數就是\(2000*60*6\)如果採用map的話,還需要多乘一個log。