하드 주제 : 폭이 먼저 검색, Union Find, Graph 당신은
방향 그래프의 노드 수를 나타내는 양의 정수 n이 주어집니다. 노드는 1에서 ni , b i
]는 a bidirectional 가 있음을 나타냅니다. 노드 사이의 가장자리 a
. 주어진 그래프가 연결이 끊어 질 수 있다는 통지
4
<:> 설명 : 이미지에 표시된대로 우리 :
첫 번째 그룹에 노드 5를 추가하십시오
두 번째 그룹에 노드 1을 추가하십시오
노드 2와 4를 세 번째 그룹에 추가하십시오
네 번째 그룹에 노드 3과 6을 추가하십시오
제약 조건 :
& lt; = n
a
그래프가 분리 될 수 있습니다 유효성 검사 : 각 연결된 구성 요소의 경우 양파장인지 확인하십시오. 그렇지 않은 경우 -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 ?>
찾기 :
단계 :
$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]출력 : -1
e
는 가장자리의 수입니다.
. 경로 압축으로 인해 거의 일정)
$n = 3; $edges = [[1,2], [2,3], [3,1]];
o (v e)
1 -> [2, 3] 2 -> [1, 3] 3 -> [1, 2]
위 내용은 노드를 최대 그룹 수로 나눕니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!