2493。將節點分為最大組
>難度: hard
>主題:廣度優先搜索,聯合查找,圖形
>給您一個正整數n,代表無向圖中的節點的數量。節點從1到n。 >您還會給您一個2D整數數組邊緣,其中邊緣[i] = [a
i,bi>]表示存在bivecrectional 節點ai 和bi之間的邊緣。 通知可以斷開給定的圖。 > 將圖的節點劃分為M組(
1個索引),這樣的節點是:>
圖中的每個節點完全屬於一個組。分組
>>示例1:
>輸入:
>輸出:
>輸出:
-1edges [i] .length == 2
問題,
“將節點分為最大組數”,涉及確定可以將無向圖的節點劃分的最大組數,以:
每個節點恰好屬於一個組。使用鄰接列表表示圖形。 >使用Union-Find來識別連接的組件。
如果不是雙分,請返回-1。
組合結果:
計劃
<?php /** * @param Integer $n * @param Integer[][] $edges * @return Integer */ function magnificentSets($n, $edges) { ... ... ... /** * go to ./solution.php */ } /** * @param $graph * @param $u * @return int */ private function bfs($graph, $u) { ... ... ... /** * go to ./solution.php */ } class UnionFind { /** * @var array */ private $id; /** * @var array */ private $rank; /** * @param $n */ public function __construct($n) { ... ... ... /** * go to ./solution.php */ } /** * @param $u * @param $v * @return void */ public function unionByRank($u, $v) { ... ... ... /** * go to ./solution.php */ } /** * @param $u * @return mixed */ public function find($u) { ... ... ... /** * go to ./solution.php */ } } // Example usage: $n = 6; $edges = [[1,2], [1,4], [1,5], [2,6], [2,3], [4,6]]; echo maxGroups($n, $edges); // Output: 4 $n = 3; $edges = [[1,2], [2,3], [3,1]]; echo maxGroups($n, $edges); // Output: -1 ?>
> Union-Find(不連接集合聯合)結構將節點組為連接的組件,並執行兩個主要任務:
步驟:
$n = 6; $edges = [[1,2], [1,4], [1,5], [2,6], [2,3], [4,6]];
>構造鄰接列表:
1 -> [2, 4, 5] 2 -> [1, 3, 6] 3 -> [2] 4 -> [1, 6] 5 -> [1] 6 -> [2, 4]
輸入:
>構造鄰接列表:
$n = 3; $edges = [[1,2], [2,3], [3,1]];
1 -> [2, 3] 2 -> [1, 3] 3 -> [1, 2]
$n = 6; $edges = [[1,2], [1,4], [1,5], [2,6], [2,3], [4,6]]; echo magnificentSets($n, $edges); // Output: 4 $n = 3; $edges = [[1,2], [2,3], [3,1]]; echo magnificentSets($n, $edges); // Output: -1
這種方法通過利用BFS進行兩性檢查和深度計算來有效地處理分組問題,同時利用Union-Find來簡化組件管理。該解決方案處理連接和斷開的圖形。
聯繫鏈接
如果您發現此系列有幫助,請考慮在Github上給出 >
>
以上是將節點分為最大組數的詳細內容。更多資訊請關注PHP中文網其他相關文章!