Networking-- 템플릿 최소 스패닝 트리 문제

주제 링크

질문의 의미 :

M N 포인트는 최소 스패닝 트리의 오른쪽 가장자리를 찾을 수

해결 방법 :

최소 스패닝 트리 베어 보드

 

코드 :

사용법 #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 ; 
}
크루스 칼

 

추천

출처www.cnblogs.com/j666/p/11616873.html