CCF-CSP 201812-4 데이터 센터 (크루스 칼 최소 스패닝 트리)

크루스 칼 최소 스패닝 트리

  코드 의견은 대략 아이디어를 분석 하였다. 루트 노드의 솔루션은 스패닝 트리의 본질을 충족하기 위해, 모든 다른 노드와 통신해야합니다. 분석의 의견에서, 최적의 솔루션은 최소 스패닝 트리입니다.

  크루스 칼의 알고리즘은 그래서 최종 스패닝 트리 에지 가중치 작은 합, 실제로는 욕심 알고리즘, 작은 에지 무게가 스패닝 트리를 구성하기 위해 선택 될 때마다입니다. 에지가 새로 추가 된 통신 포인트 맵 증가가 발생하지 않는 경우, 에지 결정할 필요가있는 삭제한다 같은 연결 부품의 양단 가장자리 정점 여부 - 이산 세트 구현. 정확히 N-1 스패닝 트리 가장자리에 첨가 스패닝 트리의 성질에 따르면, 상기 구조가 완성된다. (N은 정점의 수이다)

 

  왜 전송 시간은 경로의 최대 시간은? 참조, 즉, 각 노드의 트랜시버가 노드가 아닌 데이터 이후의 모든 데이터를 수신 한 후, 수신 및 송신하기 위해, 비동기, 파이프 라인 될 수있다. 이 이중 포트 버퍼 유사 (송신단에 전송)에 기입 포트 (수신 측에서 전송 데이터)의 판독 포트 및 상이한 속도로 기록 및 판독 데이터.

 

PS : 나는 해결 드문 문제가 발생 : 식별자가 프로그램에 정의되어있는 경우 순위 는 CSP 보고서 컴파일 오류. RANK_1 나중에 다른 식별자로 변경.

이 인해 시스템이 컴파일시에 재정의 오류의 결과로,이 식별자 순위를 차지 의문을 선고 할 수있다.

 

AC 코드 :

  1  / * 
  2  변수 이름 정의하면 * 순위 1. 컴파일러 에러 패킷 CSP는 나중에 변경 RANK_1. 이유는 알 수없는!
  3  * 
   4  * 2 통신 경로에 실질적으로 최대 송신 시간 "트리 구조의 전송 시간"의 제목. : 목표 총 전송 시간 트리 최소화하고자하는 
   5  최대 전송 시간이 최소 인 것을 특징으로하는 최소 전송 시간의 합계 (전송 시간이 제외되지 않음) 할 때 * 상기 통신 경로를. 
  6  * 따라서 "최적의 구조"아트 워크 최소 스패닝 트리를 부탁드립니다. 
  7  * 3, 피사체의 크기에 의해 제공된 데이터에 기초하여 사용 크루스 칼 알고리즘, 취급 이산 세트 간단한 합성 경로 또는 압축 최적의 랭크에 따라. 
  8  * 유일한 조건은 증가 등급이다 두 개의 동일한 서브 - 트리가 설정된 순위에 대응. 합병이 설정 때문에
   9  항상 * 작은 나무 큰 나무를 병합 순위 순위 같은 순위의 두 나무는 단지 전체 순위 1을 증가하지 않는 한, 전체 순위는 변경되지 않습니다. 
10  * 단순히 간단한 결합 계수 최적화를 이용하여, 본 실시 형태를 발견, 실행 시간은 원래의 1/40이다!
11  * 4로 압축 알고리즘은, 즉 각 성부 () 검색, 부모 노드들은 직접 루트의 포인트를 통해 탐색 될 것으로 간주 될 수있다.
12  재귀 * : 선 (45).
(13) * 간단한 압축 경로 최적화를 이용하여, 본 실시 형태를 발견, 실행 시간은 원래의 1/40이다!  
14   * / 
15   
16 #INCLUDE <iostream>
 . 17 #INCLUDE <알고리즘>
 18 인  
19. #INCLUDE <fstream>
 20 인  
21  구조체 에지 {
 22된다      INT U는 V,
 23는      INT T는,
 24      
25      인라인 부울  연산자 <( CONST 에지 E) CONST {
 (26)는          복귀 T를 < ; 등
 27      }
 28      인라인 부울  연산자 == ( CONST에지 & E) CONST는 {
 29          복귀 u는 유럽 연합 (EU)을 == || V == EV 단계;
30      }
 31  };
32  
33  사용  스페이스 성병;
34  
35  정적  INT * 모;
36  고정  INT * RANK_1;
37  
38  정적  INT의 아버지 ( INT의 P) {
 39  의 #if 0   // 최적화되지 
40      동안 (! 부모 [P] = P) {
 41          p = 부모 [P]을;
42      }
 43      리턴 P;
44  #else 
45       (부모 [P] == 피)? P (상위 [피] = 아버지 (부모 [P]));
46  #endif 다음  
47  }
 48  
49  INT 본체 ( 공극 ) {
 50      IOS :: sync_with_stdio ( 거짓 );
51      
(52)  / * # 만약 0 
 53      ifstream 핀 ( "input.txt를");
54      cin.rdbuf (fin.rdbuf ());
55  #endif 다음 * /  
56      
(57)      INT N, m, 루트;
58      CIN N >> >> >> m뿌리;
(59)      
(60)      에지의 E * = 새로운 에지 [m];
61      부모 = 새로운  INT [N + 1 ];
62      RANK_1 = 새로운  INT [N + 1 ];
63      
(64)      에 대해 ( int로 I = 0 ; I은 m이 <; ++ I) {
 65          CIN >> E [I]를 .V >> E [I] .u >> 전자 [I] .T;
66      }
 67       ( int로 I = 1 ; i가 <= N; ++ I) {
 68          부모 [I] = I;
69         RANK_1 [I] = 1 ;
70      }
 71      
72      정렬 (즉, E + m);
(73)      
(74)      의 INT (K) = 0 ;
75      INT ANS = 0 ;
76      
(77)      아버지 (E [ 0 ] .u);
78      
(79)      에 대해 ( int로 I = 0 ; I은 m이 <; ++ I) {
 80          INT의 PV = 아버지 (E [I] .V);
(81)          INT (PU) = 아버지 (E [I] .u);
82          의 경우 (PV! = PU) {
 83              하다면(RANK_1 [PV] < RANK_1 [PU]) {
 84                  부모 [PV] = (PU); // 조합 PV -> (PU) 
(85)              }
 (86)              {
 87                  부모 [PU] PV =; // 연합 PU -> PV 
88                  의 경우 (RANK_1 [PU] == RANK_1 [PV]) {
 89                      ++ RANK_1 [PV];
90                  }
 91              }
 92              
93              ++ K;
(94)              
(95)              의 경우 (예 [I] .T> ANS) {
 96                  ANS = E [I] .T;
97              }
 98          }
 99          의 경우 (케이 N- == 1 ) 파괴 ;
100      }
 101      
102      COUT << ANS << ENDL;
103      
104      복귀  0 ;
(105) }

 

추천

출처www.cnblogs.com/sci-dev/p/11489022.html