1 #INCLUDE <. 비트 / stdc ++ H> 2 사용 스페이스 성병; 3 CONST INT 맥스 = 0x3f3f3f3f ; 4 CONST INT maxn = 10000 ; 5 구조체 노드 6 { 7 INT의 U, V, L; 8 부울 연산자 <( CONST 노드 a) CONST 9 { 10 반환 L < 알루미늄; 11 } 12 } 에지 [maxn]; 13 INT의 아버지 [maxn]; (14) INT NODENUM, edgenum; 15 공극 초기화 () 16 { (17) 에 대해 ( int로 I = 0 ; I <NODENUM; 내가 ++ ) 18 { 19 아버지 [I] = I; 20 } 21 } 22 INT를 찾기 ( INT X) 23 { 24 일 동안 (아버지 [X]! = X) 25 { 26 , X = 아버지 [X]; 27 } 28 리턴 X; 29 } 30 무효유니온 ( INT의 X, INT의 Y) 31 { 32 INT temp_x = 찾기 (X); 33 의 INT temp_y = (Y) 찾기; 34 의 경우 (temp_x =! temp_y) 35 { 36 아버지 [temp_x = temp_y; 37 } 38 } 39 INT 크루스 칼 () 40 { 41 정렬 (에지, 에지 + edgenum); 42 INIT (); 43 노드 이제; 44 INT ANS = 0 ; (45) 에 대한( int로 = 1을 0 ; 나는 <edgenum; 내가 ++ ) 46 { 47 지금 = 가장자리 [I]; 48 경우 (찾기 (now.u)! = 찾기 (now.v)) 49 { 50 연합 (now.u, now.v); 51 ANS + = 드릴수; 52 } 53 } 54 리턴 ANS; 55 } 56 INT 의 main () 57 { 58 동안 (는 scanf ( " %의 D % d에 " , edgenum, NODENUM) && edgenum) 59 { (60) 에 대해 ( int로 I = 0 ; I <edgenum; ++ I) 61 { 62 는 scanf ( " % D % D % D " , 에지 [I] .u, 에지 [I] .V, 에지 [I] .엘); 63 } 64 INT ANS = 크루스 칼 (); 65 부울 플래그 = 0 ; (66) 에 대한이 ( int로 I = 2 ; I <= NODENUM; 내가 ++ ) 67 { 68 의 경우 (찾기 ( 1 !) = 찾기 (I)) 69 { 70 플래그 = 1 ; 71 체류 ; (72) } (73) } (74) 의 경우 (플래그) 75 { 76 COUT << " ? " << " \ n을 ' ; (77) } (78) 또 79 { 80 COUT << ANS << ' \ n을 ' ; 81 } 82 } 83 반환 0 ; 84 }