QOJ #8232. Yet Another Shortest Path Query

275307894a發表於2024-11-19

題面傳送門

我感覺這個題很牛逼!提供了一種全新的視角!

首先考慮這個平面圖怎麼用。因為平面圖的邊數滿足 \(m\leq 3n-6\),所以一個平面圖一定存在一個點度數 \(\leq 5\)。我們每次刪掉這樣的一個點,並刪掉所有以這個點為端點的邊,則剩下的圖還是一個平面圖,這樣不斷刪除下去就可以得到每個點的刪除時間,記作 \(p_i\)。對於每條邊,我們讓這條邊從刪除時間小的點指向刪除時間大的點,則每個點至多有 \(5\) 條出邊。

我們先考慮如何計算兩個點之間不超過 \(2\) 步的答案,不妨將兩個點記作 \(1,3\),中間點記作 \(2\)。對路徑的形態分類討論:

  • 形如 \(1\to 2\leftarrow 3\):列舉 \(1,3\) 的出邊,找到共同的點。這樣只需要至多列舉 \(25\) 次。
  • 形如 \(1\to 2\to 3\)\(1\leftarrow2\leftarrow3\):列舉一個端點的出邊以及出邊指向的點的出邊,這樣也只需要列舉 \(25\) 次。
  • 形如 \(1\leftarrow 2\to 3\):列舉 \(1\),列舉一條入邊,再列舉入邊的端點的出邊。這樣總共需要列舉 \(5m\) 次。

然後考慮如何處理不超過 \(3\) 步,將兩個點記作 \(1,4\),中間兩個點記作 \(2,3\)

  • 如果形如 \(1\to 2\),則列舉 \(1\) 的出邊轉化成 \(5\) 個距離為 \(2\) 的問題。對於 \(4\to 3\) 同理。
  • 如果形如 \(1\leftarrow2 \to3\to 4\),列舉 \(1\),列舉一條入邊,再列舉兩次出邊。對於 \(1\leftarrow2 \leftarrow 3\to 4\) 同理。

因此,我們以 \(O(n+m)\) 的複雜度解決了,常數不用管

submission

相關文章