Leetcode 並查集 685 冗餘連線 II

2021-10-09 12:58:27 字數 2029 閱讀 4585

在本問題中,有根樹指滿足以下條件的有向圖。該樹只有乙個根節點,所有其他節點都是該根節點的後繼。每乙個節點只有乙個父節點,除了根節點沒有父節點。

輸入乙個有向圖,該圖由乙個有著n個節點 (節點值不重複1, 2, ..., n) 的樹及一條附加的邊構成。附加的邊的兩個頂點包含在1到n中間,這條附加的邊不屬於樹中已存在的邊。

結果圖是乙個以邊組成的二維陣列。 每乙個邊 的元素是一對 [u, v],用以表示有向圖中連線頂點 u 和頂點 v 的邊,其中 u 是 v 的乙個父節點。

返回一條能刪除的邊,使得剩下的圖是有n個節點的有根樹。若有多個答案,返回最後出現在給定二維陣列的答案。

示例 1:

輸入: [[1,2], [1,3], [2,3]]

輸出: [2,3]

解釋: 給定的有向圖如下:

1/ \

v   v

2-->3

示例 2:

輸入: [[1,2], [2,3], [3,4], [4,1], [1,5]]

輸出: [4,1]

解釋: 給定的有向圖如下:

5 2

^    |

|    v

4 注意:二維陣列大小的在3到1000範圍內。

二維陣列中的每個整數在1到n之間,其中 n 是二維陣列的大小。

官方題解:

//無衝突邊,有環路邊

if (conflict < 0)

;return redundant;

} //有衝突邊,判斷哪個導致環路

else

;return redundant;

} else

;return redundant;}}

}}class unionfind

}public void union(int index1, int index2)

public int find(int index)

return ancestor[index];}}

同思路,另一種解法

class solution 

return false;

}private int find(int n)

public int findredundantdirectedconnection(int edges)

return u;

}/**

** @param edges

* @return

* 需要考慮有沒有環和重複的父節點

*/public int findredundantdirectedconnection(int edges)

else

;backedge=new int;

edge[1]=0;}}

//重置parent

for (int i = 0; i <= edges.length; i++)

//去掉後乙個衝突後,再次迴圈,判斷前乙個衝突是否導致了環路

for(inte:edges)

//判斷有沒有環,有環且該邊的父節點未被置為0,則返回backedge,否則返回e

if(find(e[0])==e[1])

parent[e[1]]=e[0];

}return pending;}}

並查集:

547:朋友圈

684:冗餘連線(無向圖)

685:冗餘連線(有向圖)

737:句子相似性2

990:等式方程可滿足性

1319:連通網路操作次數

952: 按公因數計算最大元件大小

leetcode685 冗餘連線 II 並查集

在本問題中,有根樹指滿足以下條件的有向圖。該樹只有乙個根節點,所有其他節點都是該根節點的後繼。每乙個節點只有乙個父節點,除了根節點沒有父節點。輸入乙個有向圖,該圖由乙個有著n個節點 節點值不重複1,2,n 的樹及一條附加的邊構成。附加的邊的兩個頂點包含在1到n中間,這條附加的邊不屬於樹中已存在的邊。...

並查集 並查集

本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...

並查集 leetcode 程式設計題

先看先人的總結 置頂 並查集詳解 傻子都能看懂的並查集入門 parent 集合代表,rank集合層級,data 元素的數值 初始化 將所有元素的集合代表設定成自己,rank層級設定成0,查詢 查詢乙個元素的集合代表,原理是指標迴圈操作 合併集合 將兩個集合的集合代表設定成乙個。一般根據rank層級選...