프림 :
이 도면은 연결되지 않은 경우 무향 그래프 주어진 최소 스패닝 트리가 출력 불가능한 얻어진다.
#INCLUDE <비트 / stdc ++ H.> 사용 스페이스 성병; CONST INT의 MAXM = 200,005 ; CONST INT INF = 0x3f3f3f3f ; 구조체 에지 { INT의 V, W, 다음; E} [MAXM << 1 ]; INT의 CNT, N, m, 합, t, P, 지금 = 1 ; int로 DIS [ 5005 ], 헤드 [MAXM, 힘 [ 5005 ]; int로 A, B, C를; 보이드 추가 ( INT UU, INT VV, INT WW) { E [++ CNT] .V = VV; E [CNT] .W = WW; E [CNT] 다음 내용 = 헤드 [UU]; 헤드 [UU] = CNT; } INT 의 main () { CIN >> >> N m; 위한 ( int로 난 = 1 ; I <= m 내가 ++ ) { CIN 사항 >> >> >> B C; 추가 (A, B, C); 추가 (먼트를 A, C); } 에 대해 ( int로 난 = 1 ; i가 N = <; 내가 ++ ) DIS [I] = INF; 대한 ( INTI = 헤드 [ 1 ]; 나는; I = E [I]가 다음 내용) DIS [E [I]를 .V] = 분 (E [I] .W, DIS [E [I] .V]); 동안 (t ++ < N) { 힘 [현재] = 1 ; INT 미네소타 = INF; 지금 = - 1 ; 위한 ( int로 I = 1 ; i가 <= N; 내가 ++ ) { 경우 (힘 [I] 미네소타 &&!> DIS [I]) { 미네소타 = DIS [I]; 지금 = I; } } 경우 (현재 == - 1 ) { COUT << " 불가 " ; 반환 0 ; } 합 + = 미네소타; 위한 ( int로 I = 헤드 [현재] I, I = E [i]는 다음 내용) { 경우 (힘 [E [I] .V] && E [I] .W <! DIS [E [I] .V ]) DIS [E [I]를 .V] = E [I] .W; } } COUT << 합; 반환 0 ; }
그것은 무향 그래프를 제공, 최소 스패닝 트리를 얻을 수있다. 통신 여부를 판단하지 마십시오
#INCLUDE <비트 / stdc ++ H.> 사용 스페이스 성병; CONST INT의 MAXM = 200,005 ; CONST INT INF = 0x3f3f3f3f ; 구조체 에지 { INT의 V, W, 다음; E} [MAXM << 1 ]; INT의 CNT, N, m, 합, t, P, 지금 = 1 ; int로 DIS [ 5005 ], 헤드 [MAXM, 힘 [ 5005 ]; int로 A, B, C를; 보이드 추가 ( INT UU, INT VV, INT WW) { E [++ CNT] .V = VV; E [CNT] .W = WW; E [CNT] 다음 내용 = 헤드 [UU]; 헤드 [UU] = CNT; } INT 의 main () { CIN >> >> N m; 위한 ( int로 난 = 1 ; I <= m 내가 ++ ) { CIN 사항 >> >> >> B C; 추가 (A, B, C); 추가 (먼트를 A, C); } 에 대해 ( int로 난 = 1 ; i가 N = <; 내가 ++ ) DIS [I] = INF; 대한 ( INTI = 헤드 [ 1 ]; 나는; I = E [I]가 다음 내용) DIS [E [I]를 .V] = 분 (E [I] .W, DIS [E [I] .V]); 동안 (t ++ < N) { 힘 [현재] = 1 ; INT 미네소타 = INF; 위한 ( int로 I = 1 ; i가 <= N; 내가 ++ ) { 경우 (힘 [I] 미네소타 &&!> DIS [I]) { 미네소타 = DIS [I]; 지금 = I; } } 경우 [현재] (DIS ==INF) { COUT << " orz " ; 반환 0 ; } 합 + = 미네소타; 위한 ( int로 I = 헤드 [현재] I, I = E [i]는 다음 내용) { 경우 (힘 [E [I] .V] && E [I] .W <! DIS [E [I] .V ]) DIS [E [I]를 .V] = E [I] .W; } } COUT << 합; 반환 0 ; }
현재의 방법의 각 루프의 양면 사이의 차이에