在本問題中,有根樹指滿足以下條件的有向圖。該樹只有乙個根節點,所有其他節點都是該根節點的後繼。每乙個節點只有乙個父節點,除了根節點沒有父節點。
輸入乙個有向圖,該圖由乙個有著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中間,這條附加的邊不屬於樹中已存在的邊。...