그룹 C에서 네 번째 질문 인기 (8.2)

남해 1342 [2009] 주니어 cowtract (네트워크) (표준 IO)

주제 :

  베시는 요한이 그들에게 인터넷 네트워크를 구축 할 수 있도록 농장에 온 고용했다. 농장 N (2 <= N <= 1000) 암소 번호 1..N. 이전 존 조사 된, M (1 <= M <= 20000) 가능한 연결 스트립 선로, 헛간의 두개를 연결하는 선을 발견했다. 각 라인 건설 비용 C (1 <= C <= 100,000)를 가질 수있다. 존은 물론, 적은 돈, 임금도 베시 공제를 보내고 싶어.

  베시 요한이 문제를하기로 결정,이 점은 매우 화가났습니다. 그녀는 몇 줄이 네트워크를 형성 선택하고 싶어하지만, 비용은 가능한 한 크다. 물론, 네트워크 즉, 둘 사이의 모든 통신이 상호 불펜, 그리고 네트워크에 반지를 가질 수 없습니다, 또는 다른 존이 아주 쉽게 찾을 것, 제대로 작동 할 수 있어야합니다.

 이러한 네트워크를 설정하는 잠재적 인 비용까지를 계산합니다.

입력 :

첫 번째 줄 : 두 개의 정수 NM
다음 라인 M : 라인 (3) 각각의 정수 A, B, C. 라인 (A)에 접속 가능성을 나타내고, B 두 우사, C. 비용

출력 :

단 한 줄, 가장 비용이 많이 드는 비용 정수. 연결이 모두 우사을 할 수없는 경우 -1 출력한다.

예 :

입력     출력                                                               
5-8 42
1 2 3
1 2 3 7
2 3 10       
2 4 4
2 8 5
3 4 6
3 5 2
4 5 17

아이디어 :

아이디어는 여전히 Keuskal 알고리즘에 따라 사용될 수있는 "<"는로 변경 ">"필요에만 걸친 "최소"전형적인 매우 간단하다. 우리는 코드에 말을 많이하지 않았다.

암호

사용법 #include <iostream> 
#INCLUDE <cstdio> 
#INCLUDE <CString을> 
#INCLUDE <알고리즘>
 사용  스페이스 성병;
INT FA [ 1001 ];
INT의 N, m, ANS, NUM;
구조체 
{ 
    INT의 BB, 아들, 돈; 
}; 
암소 트리 [ 20001 ];
INT의 발견 ( INT (X)) 
{ 
    경우 FA ([X]! = X) 
    (FA) [X] = 찾을 FA ([X]);
    반환 FA를 [X]; 
} 
공극 추가 ( INT의 X, INT의 Y)
{
    FA [FA [X] = FA [Y]; 
} 
BOOL CMP (소 X, Y 소) 
{ 
    복귀 x.money> y.money; 
} 
INT 의 main () 
{ 
    CIN >> >> N m;
    위한 ( int로 I = 1 ; i가 <= N; ++ i가 ) 
    FA [I] = I;
    위한 ( int로 I = 1 ; I <= m; 내가 ++ ) 
    { 
        CIN >> 트리 [I] 트리 .bb >> [I] .son >> 트리 [I] .money; 
    } 
    종류 (나무 + 1 , 나무 + 1 +m, CMP); 
    위한 ( int로 I = 1 ; i가 = N <; 내가 ++ ) 
    { 
        경우 (! 검색 (트리 [I]는 .bb) = [I] .son) (트리 찾기) 
        { 
            [I] .bb, 트리 [(ADD 트리 I] .son); 
            ANS = ANS + 트리 [I] .money; 
            NUM ++ ; 
        } 
    } 
    경우 (NUM N- == 1 ) 
        { 
            COUT << ANS;
            반환  0 ; 
        } 
        다른 
        { 
            COUT <<는 - 1 ;
            반환  0 ; 
        } 
}

일러스트 sahua 종료! ! !

 

 

추천

출처www.cnblogs.com/YYCether666/p/11290624.html