Contents
Problem
Solution
沒做過 Tarjan’s Algorithm,起初打算用 DFS 直接做,但從不一樣的點開始推都會影響,應該不太可行了…
找出 SCC,再利用這些點收縮後的 component (形成 DAG),找各個的 入邊(in-edge) (不知道有沒有 in-edge 這個講法…)。
只要沒有入邊,就代表一定要從這裡開始推。而有入邊的可以透過其他 component 連過去。
作法參考:http://www.csie.ntnu.edu.tw/~u91029/Component.html#4
我想最關鍵的地方就是如果有 back edge,則還在 stack 中 back edge 所能到的最高祖先 及 它的子孫們 可以形成 SCC。
其餘詳細部分就請自行查閱了。
把樹畫出可以幫助理解,可以用裡面的圖:https://youtu.be/ju9Yk7OOEb8
附上個 udebug 的測資:(畫出來~)
1 | IN: |
Code
1 |
|