哈密頓路徑

Juye_Scene發表於2024-07-13

題目描述

有一張n個節點的無向圖,對於所有 (i,j),判斷 i 和 j 之間是否存在哈密頓路徑

1<=n<=24

哈密頓路徑:經過每個點恰好一次

樂樂樂樂樂

考慮暴力:\(dp[i][j][st]\)表示從\(i\)開始到\(j\)的經過的點的狀態\(st\)(\(st\)狀壓每一個點是否被經過)是否可行

轉移時列舉一個\(k\),類似Floyd,要求\(st\)的並只有\(k\)

複雜度:\(O(n^32^n)\),輕輕鬆鬆TLE(樂)

奇妙性質:對於任意一點\(k\),哈密頓路徑中\(i\)\(j\)可以拆為\(k\)\(i\)\(k\)\(j\)(如果存在這條路徑,那麼一定經過每一個點)

我們欽定\(1\)\(k\)點,點對\((i,j)\)的路徑相當於\((i,1)\)\((1,k)\)兩條路徑拼接得到

設計新dp:\(dp[i][st]\)表示從1出發到\(j\)狀態為\(st\)(\(st\)意義同上)是否可行

轉移列舉下一個點即可

我們最佳化掉了一維,且\(st\)的狀態少一半(不用壓第一個點)

複雜度:\(O(n2^n)\),依然爆炸

取不來小標題

發現dp僅儲存可不可行,浪費了

我們再壓dp:\(dp[st]\)狀態為\(st\)(\(st\)意義同上的上),可以到的點的狀壓(dp狀態、值雖然都是\(2^n\)狀壓,但意義不同)

這樣就是\(O(n2^n)\)

考慮統計答案

我們要統計\(n^2\)個點對\((i,j)\)是否可行

鴿了

相關文章