leetcode685 冗餘連線 II 並查集

2021-10-09 13:23:44 字數 1729 閱讀 8534

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

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

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

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

示例 1:

輸入:[[

1,2]

,[1,

3],[

2,3]

]輸出:[2

,3]解釋: 給定的有向圖如下:

1/ \

v v2--

>

3

示例 2:

輸入:[[

1,2]

,[2,

3],[

3,4]

,[4,

1],[

1,5]

]輸出:[4

,1]解釋: 給定的有向圖如下:

5<-1

->2^

|| v

4<

-3

注意:

在做本題的時候,首先要想明白,什麼情況下會出現附加邊

利用並查集來判斷圖中是否有環:當該條邊還未加入並查集的時候,就已經有相同的根,那麼該條邊就是導致圖中有環的邊。

class union

int find

(int x)

return p;

}

void merge

(int x, int y)

else

if(level[px]

< level[py]

)else

}

bool same

(int x, int y)};

class solution

u.merge

(edges[i][0

], edges[i][1

]);}

return

true;}

//確定刪除環中的哪一條邊

vector

getedges

(vector

>

& edges)

u.merge

(edges[i][0

], edges[i][1

]);}

return;}

vector

findredundantdirectedconnection

(vector

>

& edges)

vector vec;

for(int i = n -

1; i >=0;

--i)

}//如果有度為2的點,判斷刪除後是否會構成樹

if(vec.

size()

>0)

else

}return

getedges

(edges);}

};

Leetcode 685 冗餘連線 II C

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

685 冗餘連線 II

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

Leetcode 並查集 685 冗餘連線 II

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