아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

완전그래프의 최소 스패닝 트리

시간 제한5초메모리 제한16 MB

요약
각 정점 값에서 산술 연산과 XOR로 간선 가중치가 정해지는 완전 그래프가 주어질 때, 최소 신장 트리의 가중치 합을 구한다.
난이도

어려움10점 중 9점

유형
최소 신장 트리, 그래프, 비트 연산, 분할 정복
정답자
아직 제출이 없습니다

문제

0부터 N - 1까지 번호가 붙은 N 개의 정점으로 이루어진 완전그래프가 있다.

각 정점 i 는 값 Xi 를 가진다.

번호의 크기 관계가 i < j 인 두 정점 i 와 j 를 잇는 양방향 간선의 가중치 dist(i, j) 는 다음과 같이 계산된다.

dist(i, j) = ((Xi × A + Xj × B) % C) ^ D

여기서 A, B, C, D 는 상수이고, % 는 나눗셈의 나머지 연산, ^ 는 bitwise XOR 연산을 뜻한다.

주어진 그래프의 최소 신장 트리 (MST) 의 가중치를 구하자.

입력

첫 번째 줄에는 정점의 개수 N 이 주어진다.

두 번째 줄에는 4 개의 정수 A, B, C, D 가 차례대로 주어진다.

세 번째 줄에는 N 개의 정수가 주어진다. 0 번 정점부터 N-1 번 정점까지의 Xi 가 순서대로 주어진다.

입력으로 주어지는 모든 수는 제약사항의 범위를 만족하는 정수이며, 각 수는 공백으로 구분된다.

출력

최소 신장 트리의 가중치를 출력한다.

제한

  • 1 ≤ N ≤ 10,000
  • 0 ≤ Xi, A, B, C, D ≤ 1,000,000,000,000
  • C ≠ 0

힌트

시간 제한과 메모리 제한 때문에 C/C++, Java11, PyPy3 이외의 언어로는 정해를 사용해도 정답을 받을 수 있다고 보장되지 않는다.

예제2

  1. 예제 1

    입력
    5
    76 98 73 42
    3 2 13 16 7
    
    예상 출력
    18
    
  2. 예제 2

    입력
    7
    687616258876 548342706698 598924357642 479342226273
    474585935261 621191507020 781184643570 736346504107 987108549969 385099936705 997944222071
    
    예상 출력
    779662173222