POJ 1251 (최소한의 스패닝 트리 문제)

POJ1251

제목 : 입력 N은 N 포인트를 나타내고, n-1 개의 각각의 문자 시작점을 나타내고, 다음 입력 라인 및 K와 K는 그 시점의 이름과 변의 길이를 부착 점을 나타내고

질문 그를 최소 스패닝 트리

사용법 #include <iostream> 
#INCLUDE <cmath> 
#INCLUDE <cstdio> 
#INCLUDE <CString을> 
#INCLUDE < 문자열 > 
#INCLUDE <지도> 
#INCLUDE <iomanip> 
#INCLUDE <알고리즘> 
#INCLUDE <큐> 
#INCLUDE <적층> 
#INCLUDE은 < 설정 > 
#INCLUDE <벡터>
 // CONST의 INT maxn 1E5 + = 5; 
#DEFINE가 긴 긴 줄게 
{(a -1,11,11-의 b) LL의 공약수를 반환 ? B GCD (B, A %의 ; A B)} 
(LL A, LL B는) {LL의 LCM 반환 하는 (a / GCD을

#DEFINE MAX INT_MAX의
 #DEFINE FOR (I, a가, b)에 대한이 (INT 나 A =; 나는 = B를을 <; I ++)
 #DEFINE의 버그 COUT << "------------- - "<< ENDL은
 사용  공간의 성병;
INT의 ANS, N, 꼬리;
INT의 전 [ 500 ];
구조체 노드 
{ 
    INT의 X, Y, Z; 
에지} [ 5000 ];
부울 CMP (노드 A, 노드 B) 
{ 
    반환 아리조나 < BZ; 
} 

의 INT (존재 의 INT (X)) 
{ 
    경우 (X == 미리 [X]) 복귀 X;
    반환 찾기 (프리 [X]); 
}
보이드 clearr () 
{ 
    memset 함수 (에지, 0 , 는 sizeof (에지)); 
    memset 함수 (프리, 0 , 는 sizeof (예정)); 
    ANS = 0 ; 
} 
INT 의 main () 
{ 

    동안 (는 scanf ( " %의 D ' , N)) 
    { 
        경우 (N == 0 ) 휴식 ; 
        () clearr; 
        (내가 FOR 1 , N- 1 ) 
        { 
            숯불 를 B;
            INT의 K, NUM;
            //scanf와 ( "% c % d로"& A, K); 
            CIN 사항 >> >> K; 
            (j, FOR 1 , K) 
            { 
                // 는 scanf ( "% c % d로", B, NUM); 
                CIN B >> >> NUM; 
                에지 [ ++ 꼬리] .x를 A- = 64 ; 
                에지 [꼬리] .Y = B- 64 ; 
                에지 [꼬리] .Z = NUM; 
            } 
        } 
        정렬 (에지 + 1 에지 + 1 개 + 꼬리 CMP); 

        (I, FOR 1 , N)를 미리 [I] = I; 

        FOR (I, 1 , 꼬리)
            INT headx = 찾기 (에지 [I] .x를);
            INT 흥분 = 찾기 (에지 [I] .Y);
            경우 (headx == 앞뒤를 헤아 리지) 계속 ; 
            [headx] 미리 = 무모한; 
            ANS + = 가장자리 [I] .Z; 
        } 
        COUT << ANS << ENDL; 


//         (I, 1, 꼬리) FOR
 //         {
 //             COUT << 에지 [I] .x를 << ''<< 에지 [I] << .Y ''<< 에지 [I] << .Z ENDL;
//         } 
    } 
}

 

추천

출처www.cnblogs.com/jrfr/p/11280126.html