클리크 그래프의 최단 경로 합

여러 개의 클리크를 겹쳐 만든 그래프가 주어질 때, 모든 두 정점 사이 최단 경로 길이의 합을 구한다.

보통6그래프BFS최단 경로아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

정점이 NN개인 무방향 무가중치 연결 그래프 GG가 있다. 정점 번호는 0번부터 N1N-1번까지이다.

GG의 간선은 배열 VV와 배열 sizessizes로 정해진다. VV는 정점 번호를 담은 배열이고, 같은 번호가 여러 번 나올 수 있다. sizessizesVV를 앞에서부터 잘라 만드는 블록의 길이를 담은 배열이다.

먼저 S[i]S[i]sizessizes의 앞 ii개 원소의 합으로 정의한다. 예를 들어 sizes={10,20,30}sizes = \{10, 20, 30\}이면 S[0]=0S[0] = 0, S[1]=10S[1] = 10, S[2]=30S[2] = 30, S[3]=60S[3] = 60이다.

0i<K0 \le i < K인 모든 ii에 대해 S[i]j<k<S[i+1]S[i] \le j < k < S[i+1]을 만족하는 쌍 (j,k)(j, k)를 모두 생각한다. 각 쌍마다 정점 V[j]V[j]와 정점 V[k]V[k]를 잇는 간선이 하나 있다. 다시 말해 V[S[i]]V[S[i]]부터 V[S[i+1]1]V[S[i+1]-1]까지의 정점은 완전 그래프를 이룬다. 이렇게 만들어진 간선 말고 다른 간선은 없다.

NN, VV, sizessizes가 주어지면 서로 다른 두 정점의 모든 쌍에 대해 최단 경로의 길이를 구하고 그 합을 출력하는 프로그램을 작성하시오. 입력으로 주어지는 그래프는 항상 연결 그래프이다.

입력

첫째 줄에 정점의 수 NN (2N25002 \le N \le 2500), VV의 크기 MM (1M50001 \le M \le 5000), sizessizes의 크기 KK (1K25001 \le K \le 2500)가 공백으로 구분되어 주어진다.

둘째 줄에 VV의 원소 MM개가 순서대로 주어진다. 셋째 줄에 sizessizes의 원소 KK개가 순서대로 주어진다.

VV의 원소는 모두 0 이상 N1N-1 이하이다. sizessizes의 원소는 모두 2 이상 NN 이하인 자연수이고, 그 합은 MM 이하이다. 0i<K0 \le i < K인 모든 ii에 대해 V[S[i]],V[S[i]+1],,V[S[i+1]1]V[S[i]], V[S[i]+1], \dots, V[S[i+1]-1]은 서로 다르다.

출력

서로 다른 두 정점으로 이루어진 모든 쌍의 최단 경로 길이를 더한 값을 첫째 줄에 출력한다. 한 쌍은 한 번만 센다. 이 값은 32비트 정수의 범위를 넘을 수 있다.