UVA-11175 From D to E and Back 解題紀錄
🔗 UVA-11175 From D to E and Back
tags: 圖論(Graph)
矛盾法(Contradiction)
C++
範例程式碼已於 UVA
、瘋狂程設(CPE)
上測試通過。
無法使用 Python
,會 TLE 。
題意
- 取一個具有 個頂點和 條邊的有向圖 ,可以依照以下方式將 轉換成 躺平圖(Lying graph) 。
- 中的每個頂點代表 的一條邊。例如,如果 有一條邊 ,那麼 將有一個名為 的頂點。
- 若 中存在邊 和 ,則 中也會有一條從頂點 到頂點 的邊。
- 給定一個圖 ,確定 是否可能是某個有向圖 的 躺平圖(Lying graph)
註:躺平圖(Lying graph) 也叫做 Line Graph ,是一種特殊的圖,其頂點代表原圖的邊,邊代表原圖中的邊之間是否有共同的頂點(即原圖中的邊是否相鄰)。
思路:圖論(Graph)、矛盾法(Contradiction)
- 首先來思考什麼樣的情況會導致無法構成躺平圖,先說結論,對於任意兩點 和 ,若存在一點 使得 和 都能到達 ;但又存在另一點 使得 和 只有其中一個能到達 ,則無法構成躺平圖。
- 為方便說明,將圖 上的邊表示為 的形式,其中 和 分別代表起點和終點,圖 上的點表示為 的形式。
- 對於圖 中的任意兩點 和 ,若存在一點 使得 和 都能到達 ,則顯然 和 在圖 中對應的邊,具有相同的 ,即 和 有共同的終點。而若 和 只有其中一個能到達 ,則 和 在圖 中對應的邊,具有不同的 。這兩種情況若同時存在,顯然產生 矛盾 ,故無法構成躺平圖。
- 如下圖所示,顯然圖 中少了一條 的邊,因此無法構成躺平圖。
- 時間複雜度:
- 空間複雜度:
1 |
|
參考資料
- Graph - 演算法筆記
其中的 Line Graph 部分 - UVa 11175 有向图D和E(From D to E and Back)_uva11175-CSDN博客
其中的範例圖
寫在最後
Cover photo is remixed from @Tekeli_liw3, thanks for their work!
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 十六個天亮!
評論
WalineGiscus