제목 설명
이 수치가 연결되어 있지 않으면 그 경우 무향 그래프 주어진 최소 스패닝 트리가 출력 orz 얻어진다
입력 형식
첫 번째 라인은 N은 M이 N은 전체 노드도 상기 M 방향성 에지를 나타내는 두 개의 정수를 포함한다. (N <= 5000, M <= 200,000)를
다음 M 라인이 세 사이의 정수, 이순신 닫아 포함 닫아 아니오 사이, 이순신 노드에 연결된 에지의 길이를 표현
출력 형식
출력의 개수, 즉, 최소 스패닝 트리 각 변의 길이를 포함하는 상기 출력 orz 연결도되지 않는 경우.
샘플 입출력
입력 # 1
4 5 1 2 2 1 3 2 1 4 3 2 4 3 3 4 3
출력 # 1
(7)
설명 / 팁
시간의 제약 : 1000MS, 128M
데이터 규모 :
데이터의 20 % : N <= 5, M <= 20
데이터의 40 % : N <= 50, M <= 2,500
데이터의 70 % : N <= 500, M <= 10000
데이터의 100 % : N <= 5000, M <= 200000
샘플 설명 :
따라서, 최소의 총 중량의 에지 스패닝 트리 2 + 2 + 3 = 7
- 아이디어 : 입력측 (왼쪽 가리키는, 우단 포인트 B, 길이 w) 모두가 디스 조인트 세트 AB 엔드 포인트가 연결되어 있는지 여부를 판정하여, 벡터를 이송 한 후, 소형 ~ 대형의 길이가 다음 벡터 안에 장착하고,이 연결되었다 그렇지 않은 경우 (A, B, W)를 연결 사용 스킵.
- 마지막으로, 가장자리가 이미도 통신되는 경우, 에지 작고 선거 선택되고, 따라서 최소 길이 인 N-1로 연결된다.
- 에지는 N-1로 에지를 선택하지 않은 경우에는 통신 확실히도 없다.
AC 코드 및 템플릿
#INCLUDE <비트 / STDC H ++.> 은 USING 공간 STD; CONST의 INT NN = 1E4 + 10 , INT N, M] 값 int FA [NN] 구조체 노드 { INT의 A, B, W, 친구 부울 연산자 <(노드 N1, 노드 N2) { // 정렬 노드 구조는 기록 기능 후, CMP를 정의하지 복귀 n1.w < ; n2.w } } 벡터 <노드> VE; // 수납 용기 측 의 INT 찾기 ( INT X ) { // 조상 찾기 IF (X 방향을! = FA [X 방향]) FA [X 방향] =발견 FA ([X]); 반환 FA를 [X]; } 공극이 (조인 의 INT (X), INT의 y)를 { // 合并 INT FX는 = (X) = 기 찾는 검색 (Y)를; 경우 (FX =! 기) FA [FX] = 기; } INT 의 main () { CIN >> N >> M; 위한 ( int로 I = 1 , N = 1이 <; 내가 ++) FA [I] = I; int로 를, B, w; 반면 (M-- ) { 는 scanf ( " % D % D % D ' , A, 및 B & W); ve.push_back ({A, B, W}) } 정렬 (ve.begin () ve.end ()); // 정렬 긴 롱 SUM = 0 ; // 모든 에지 패턴 전체 길이 INT의 가장자리 = 0 ; // 측면의 선택 수 에 대한 : (자동 V는 VE) { IF {(! 찾기 (VA) = 찾기 (VB)) // 점이 유니콤 B 지점이 아닌 경우,이 가장자리 병합 선택 가입 (VA, VB ) SUM + = VW, 가장자리 ++ ; } } IF (가장자리> N- = 1이다. ) SUM COUT << << ENDL; 의 다른 COUT <<" orz " << ENDL; 반환 0 ; }