題目連結:
題目意譯:
在這個問題中,一棵樹為一個無向圖,其為無環的連通圖。
你被給定一個圖,其一開始為一棵樹有著 n 個節點編號為 1 到 n,之後便加上了一條額外的邊。新加的邊為從 1 到 n 選出兩個相異數字作為其頂點,且不會是已經存在的邊。圖以一個長度為 n 的陣列 edges 表示,其中 edges[i] = [ai, bi] 代表著圖中的節點 ai 與節點 bi 之間有著一條邊。
回傳可被移除的一條邊使得結果的圖為一個有著 n 個節點的樹。如果有多個答案,則回傳輸入最後出現的那一個。
限制:
n == edges.length
3 ≦ n ≦ 1000
edges[i].length == 2
1 ≦ ai < bi ≦ edges.length
ai ≠ bi
沒有重複的邊。
給定的圖為連通圖。
範例測資:
範例 1:
輸入: edges = [[1,2],[1,3],[2,3]]
輸出: [2,3]
範例 2:
輸入: edges = [[1,2],[2,3],[3,4],[1,4],[1,5]]
輸出: [1,4]
解題思維:
找出答案的過程有點像是找一個圖的最小生成樹(Minimum Spanning Tree,如
這題),同樣也是利用併查集(Union-Find Set)來檢查一條邊的兩個頂點是否已經連通。如果是就加入這條邊;反之則為答案。而因為我們是按照輸入順序去檢查,所以當可行解出現時一定是所有可能中最後出現的。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。