제목 : 입력 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; // } } }