건설 도로 POJ - 2421 (최소 스패닝 트리)

 

아이디어 : 먼저, 도로 2 차원 어레이 DIS [] []의 입력 처리가 복구되어, 그의 대응 DIS가 [I] [J]가 0으로 설정된다. 그런 다음 마지막

      모든 DIS는 [] [] 트리 알고리즘에 걸친 최소 크루스 칼을 사용하여 얻은 측 구조체를 저장한다.

 

1 #INCLUDE <iostream>
 2 #INCLUDE <벡터>
 3 #INCLUDE < 문자열 >
 4 #INCLUDE <cmath>
 5 #INCLUDE < 설정 >
 6 #INCLUDE <알고리즘>
 7 #INCLUDE <cstdio>
 8 #INCLUDE <지도>
 9 # 포함 <CString을>
 10  
11  사용  스페이스 성병;
(12)  
(13)  의 INT DIS [ 110 ] [ 110 ];
14  구조체 에지
 15  {
 16      INT의 A, B;
17      INT비용;
18 } 에지 [ 1000010 ];
19  
(20)  INT의 트리 [ 110 ];
21  
(22)  INT 이제 findroot ( INT X)
 23  {
 24 일      경우 (트리 [X] == - 1 )
 25          리턴 X;
26      INT TMP = 이제 findroot (트리 [X]);
27      트리 [X]는 = TMP를;
28      리턴 TMP;
29  }
 30  
31  부울 CMP (에지 E1, E2 에지)
 32  {
 33      반환 e1.cost <e2.cost;
34  }
 35  
36  INT의 주 ()
 37  {
 38      INT N;
39      는 scanf ( " %의 D ' , N);
(40)      에 대한이 ( 값 int = 1을 1 ; 나는 = <N; ++ I)
 41          트리 [I] = - 1 ;
(42)          
(43)      에 대해 ( int로 I = 1 ; i가 N = <++ I)
 44           ( INT J = 1 ; J <= N; ++ j)는
 45              는 scanf (" %의 D " , DIS [I] [J]);
46      
(47)      INT에서 Q;
48      는 scanf ( " %의 D ' , Q);
(49)      에 대한이 ( int로 I = 1 ; I <= Q; ++ I)
 50      {
 51          INT의 A, B;
52          는 scanf ( " % d 개 %의 D ' , A, 및 B);
53          DIS [A]는 [B] = 0 ;
54      }
 55      
56      INT에 K = 1 ;
57       (INT I = 1. , I는 <= N-, ++는 I)
 58           ( INT J = 1. , J <= N-; ++ J)
 (59)          {
 60              IF ! (J는 = 내가 J를 <&&는)     // 주의 동일한 것을 측면을 저장 반복하지 마십시오! 
61는              {
 62된다                  = 에지 [K] II.A I가,
 63은                  에지 [K] .B = J;
 64                  엣지 [K] = .cost DIS [I] [J]
 65                  ++ K;
 66              }
 67          }
 68      정렬 ( + 에지 . 1 , 에지 +K, CMP);
69      INT ANS = 0 ;
(70)      에 대한이 ( int로 I = 1 ; i가 K를 <; ++ I)
 71      {
 72          INT RA = 이제 findroot (에지 [I] .A);
(73)          INT RB = 이제 findroot (에지 [I] .B);
74          의 경우 (RA =! RB)
 75          {
 76              트리 [RA] = RB;
77              ANS + = 가장자리 [I] .cost;
78          }    
 79      }
 80      
81      의 printf ( " % D \ 없음" , 년)
 82      
83      복귀  0 ,
 84 }

 

추천

출처www.cnblogs.com/FengZeng666/p/11404856.html