【湖南集訓3.30】sanrd

題目描述

給出一個n 個點m 條邊的無向圖H

定義圖AB 的乘積A×B 是一個無向圖G ,其點集V={(x,y)|xA,yB} ,邊集E={((u,v),(u,v))|u=uvv=2kv=vuu=2k(k0)}

要求你把H 分解爲C×D ,其中D 的點數爲2p (從0 開始編號),D 中兩個點間有連邊,當且僅當兩個點的標號的異或值是2 的冪。

n,m105


分析

實際上這個題把題面要求的東西讀懂了,就很好做。

其實D=(01)k ,也就是隻有0,1 兩個點時得到的圖的若干次冪。
考慮乘上一個(01) 代表了什麼,實際上代表把原圖複製一份,對應點之間連邊。
那麼對應的,我們每次嘗試把圖H 分解成兩個完全相同的圖,而且兩個圖存在的連邊只能是一一對應的點。
我們假如枚舉了一條層間邊,其他的層間邊也可以被馬上確定。
那麼應該要枚舉哪條層間邊呢?考慮枚舉度數最小的點,它的度數不會超過n ,因此,每次選取度數最小的點進行枚舉,O(n) 判斷可行性,找到某種可行方案時向下遞歸就好了。

考慮時間複雜度,Tn=2Tn2+nn
於是總的時間複雜度是O(nnlogn)

發佈了114 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章