질문의 의미 :
M N 포인트는 최소 스패닝 트리의 오른쪽 가장자리를 찾을 수
해결 방법 :
최소 스패닝 트리 베어 보드
코드 :
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
사용법 #include <iostream> #INCLUDE <STDIO.H> #INCLUDE <math.h> #INCLUDE <알고리즘> #INCLUDE <벡터> 사용 스페이스 성병; 타입 정의 긴 긴 LL; CONST의 INT의 maxn = 50 ; INT [maxn] F; int로 N, CNT; 구조체 노드 { int로 U, V, w; 부울 연산자 <( CONST 노드 a) CONST { 창 <w AW; } } 에지 [maxn * maxn]; INT (존재 의 INT (X)) { 반환 X == F [X] × : F [X] = 찾기 (F [X]); } INT의 크루스 칼 () { INT ANS = 0 ; 위한 ( int로 I = 0 F [I] = 내가 ++; 나는 <= N)의 I; INT 합 = 0 ; 정렬 (에지, 에지 + CNT); 위한 ( int로 I = 0 ; I <I은 CNT가 ++ ) { INT (X) = 에지 [I] .u; INT Y = 가장자리 [I] .V; INT의 FX =(x)를 찾기; INT 기 = 찾기 (Y); 경우 (FX =! 기) { F [FX] = 기; ANS + = 가장자리 [I] .W; 요약 ++ ; } 경우 (N- 합 == 1 ) 체류 ; } 반환 ANS; } INT 의 main () { INT의 N, m; 동안 (~는 scanf ( " %의 D % d에 " , N, m) && N) { CNT =의 m; ...에 대한( int로 I = 0 ; i가 N = <; 내가 ++) F [I] = I; 위한 ( int로 I = 0 ; I <m은, 내가 ++ ) { int로 U, V, w; scanf와 ( " % D % D % D ' , U, V, W); 에지 [I] .u = U; 에지 [I] .V = V; 에지 [I] .W = w; } 의 printf ( " % D \ 없음 " , 크루스 칼 ()); } 반환 0 ; }