ARC173D-Bracket Walk

Grice發表於2024-03-11

題意

給定一個\(n\)個點\(m\)條邊的有向強聯通圖,每條邊為'('或')',問是否存在一條迴路,使得每條邊至少經過一次,且路徑的邊按順序拼接後形成的字串為合法括號序列
輸出'Yes' or 'No'
\(n\le 4000\)\(m\le 8000\)

做法

邊'('、')'分別替換成權值\(+1,-1\)

觀察1:題意可以轉化成:找出一條迴路,每條邊至少經過一次,路徑邊權和為\(0\)

證明略

觀察2:若此圖同時存在正環或負環,則一定有解

此圖為強聯通圖,證明顯然

觀察3:若此圖僅有負環或僅有正環,則一定無解

證明略

那麼題目轉化為判斷是否存在正環或負環,可以用\(\text{Bellman-Ford}\)演算法在\(O(nm)\)內解決。