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

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

섬과 다리

시간 제한1초메모리 제한128 MB

요약
정점 값의 합, 변 곱, 삼각형 곱을 더한 점수가 최대가 되는 해밀턴 경로를 찾고 그 경로의 개수를 센다.
난이도

보통10점 중 7점

유형
동적 계획법, 비트 연산, 그래프, 조합론
정답자
아직 제출이 없습니다

문제

다리로 연결된 섬들의 지도가 주어집니다. 해밀턴 경로는 다리를 따라 이동하면서 모든 섬을 정확히 한 번씩 방문하는 경로입니다. 각 섬에는 양의 정수 값이 하나씩 붙어 있습니다. 모든 해밀턴 경로 중에서 아래에 정의된 점수를 최대로 만드는 경로를 찾으며, 이런 경로를 최적 삼각 해밀턴 경로라고 부릅니다.

섬이 nn개 있다고 합시다. 해밀턴 경로 C1C2…CnC_1 C_2 \ldots C_n에 대해 ViV_i를 섬 CiC_i의 값이라 하면, 이 경로의 점수는 다음 세 부분의 합입니다.

  • 첫째 부분: 경로 위의 모든 섬에 대한 ViV_i의 합.
  • 둘째 부분: 경로에서 이웃한 모든 쌍 CiCi+1C_i C_{i+1}에 대해 곱 Vi⋅Vi+1V_i \cdot V_{i+1}을 더합니다.
  • 셋째 부분: 경로에서 연속한 세 섬 CiCi+1Ci+2C_i C_{i+1} C_{i+2}가 지도 위에서 삼각형을 이루면(즉 CiC_i와 Ci+2C_{i+2} 사이에도 다리가 있으면) 곱 Vi⋅Vi+1⋅Vi+2V_i \cdot V_{i+1} \cdot V_{i+2}을 더합니다.

첫 번째로 가능한 최대 점수를 구하세요. 이 최댓값에 도달하는 해밀턴 경로가 여러 개일 수 있으므로, 두 번째로 최적 삼각 해밀턴 경로가 몇 개인지도 구하세요.

입력

첫 줄에 테스트 케이스의 수 qq (q≤20q \le 20)가 주어집니다. 각 테스트 케이스는 다음과 같이 주어집니다.

  • 섬의 수 nn과 다리의 수 mm이 공백으로 구분되어 한 줄에 주어집니다. 섬은 최대 1313개입니다.
  • 다음 줄에 nn개의 양의 정수가 주어지며, ii번째 수는 섬 ii의 값 ViV_i입니다. 각 값은 100100 이하입니다.
  • 이어서 mm개의 줄에 각각 x y가 주어지며, 섬 xx와 섬 yy 사이에 양방향 다리가 있음을 뜻합니다. 섬은 11번부터 nn번까지 번호가 매겨집니다.

출력

각 테스트 케이스마다 두 수를 공백으로 구분하여 한 줄에 출력합니다. 첫 번째 수는 최적 삼각 해밀턴 경로의 최대 점수이고, 두 번째 수는 서로 다른 최적 삼각 해밀턴 경로의 개수입니다. 지도에 해밀턴 경로가 하나도 없으면 0 0을 출력합니다.

경로를 거꾸로 뒤집어 쓴 것은 같은 경로로 봅니다.

예제2

  1. 예제 1

    입력
    2
    3 3
    2 2 2
    1 2
    2 3
    3 1
    4 6
    1 2 3 4
    1 2
    1 3
    1 4
    2 3
    2 4
    3 4
    
    예상 출력
    22 3
    69 1
    
  2. 예제 2

    입력
    1
    1 0
    7
    
    예상 출력
    7 1