트럭 역사 POJ - 1789

주제 링크 : https://vjudge.net/problem/POJ-1789

아이디어 :

그 의미 제목, 길이 7의 문자열의 일부를 주어진 문자열 지점으로 추상화 될 수 있습니다

각 점 사이의 거리가 문자 다른 번호의 다른 문자열로 자신의 문자열입니다.

이사회 후 최소 스패닝 트리입니다.

1 #INCLUDE <STDIO.H>
 2 #INCLUDE <iostream>
 3 #INCLUDE <큐>
 4  하여  공간을 성병;
5  
6  CONST  INT N = ( INT ) 2e3 + 10 ;
7  CONST  INT INF = ( INT ) 1E9;
8   STR [N] [ 10 ];
9  INT g [N] [N];
10  의 INT DIS [N];
11  BOOL 힘 [N];
12  INT T;
13  
(14)  구조체 노드 {
 15     INT LOC;
16      INT w;
17  
18      부울 친구 연산자 <( CONST 노드 A, CONST 노드 b) {
 19          반환 AW> BW;
20      }
 21  };
22  
23 priority_queue <노드> 케;
24  
(25)  INT의 프라임 () {
 26  
(27)      에 대해 ( INT가 나는 = 1 ; I <= T; I ++ ) {
 28          힘 [I] = 0 ;
29          DIS [I] =INF;
30      }
 31  
32      동안 (! que.pop () que.empty ());
33  
34      que.push (노드 { 1 , 0 });
35      [DIS 1 ] = 0 ;
36  
(37)      동안 (! {que.empty ())
 (38)          INT U = que.top () LOC.;
39          que.pop ();
40          힘 [유] = 1 ;
41  
42           ( INT의 V = 1 ; V <= T, V ++ ) {
 43              하다면(힘 [V] && DIS [V]>! g [U] [V]) {
 44                  DIS [V] = g [U] [V];
45                  que.push (노드 {V, DIS [V]});
46              }
 47          }
 48      }
 49  
50      INT ANS = 0 ;
51       ( INT가 나는 = 1 ; I <= T; I ++ )
 52          ANS + = DIS [I];
53  
54      복귀 ANS;
55  }
 56  
57  INT의 주 () {
 58  
(59)      동안 (scanf와 ( "%의 D ' , T)) {
 60  
(61)          의 경우 (T)! 체류 ;
 62  
(63)          에 대한 ( INT가 나는 = 1 ; I <= T; I ++ )
 (64)              는 scanf ( " % S " , STR [I]),
 (65)  
66  
(67)          INT에서 CNT = 0 ,
 68           ( INT가 나는 = 1 ; I <= T; I ++ ) {
 69               ( INT J = 나 + 1 , J <= T, J ++ ) {
 70                 = CNT 0 ]
 (71)은                  
72                  // 각 점의 거리와 다른 점 
(73)이된다                  위해 ( INT O = 0 ; O < . 7 ; O ++ )
 74                      IF (! STR [I] [O] = STR [J] [O])
 75                          ++ CNT;
 76  
(77)                  G [I] [J] = G [J] [I] = CNT;
 78              }
 79          }
 80  
81           ( INT I = 1. ; I <= T; I ++ )
 82              G [I] [I] = 0 ;
83  / * 
84          대 (INT 난 = 1; I <= T; I ++) {
 85              대 (INT J = 1; J <= T, J ++)
 86                  의 printf ( "%의 D", g [I] [J]) ;
87              의 printf ( "\ n");
88          }
 89  * / 
90          의 printf는 ( " 최고 가능한 품질을 1 / D % \ n. " 프라임 ());
91      }
 92  
93      복귀  0 ;
94 }

 

추천

출처www.cnblogs.com/SSummerZzz/p/11822947.html