완전그래프의 최소 스패닝 트리
시간 제한5초메모리 제한16 MB
각 정점 값에서 산술 연산과 XOR로 간선 가중치가 정해지는 완전 그래프가 주어질 때, 최소 신장 트리의 가중치 합을 구한다.
문제
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 이외의 언어로는 정해를 사용해도 정답을 받을 수 있다고 보장되지 않는다.