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

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

시골 우체부

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

요약
1번 마을에서 시작해 모든 도로와 마을을 방문하며 순서에 따른 마을 수입에서 이동 비용을 뺀 값을 최대화합니다.
난이도

보통10점 중 5점

유형
수학, 그래프, 구현
정답자
아직 제출이 없습니다

문제

시골 우체부는 마을에 사는 사람들과 마을을 잇는 도로변에 사는 사람들, 즉 지역의 모든 주민에게 우편물을 배달해야 한다.

우체부가 모든 도로를 지나고 모든 마을을 적어도 한 번씩 방문하는 경로를 정하도록 도와주자. 여기서 다루는 모든 경우에는 그런 경로가 반드시 존재한다. 어떤 경로를 택하느냐에 따라 우체국이 받는 금액이 달라지므로 경로마다 가치가 다를 수 있으며, 중요한 것은 우체부가 아니라 우체국의 이익이다.

각 마을은 우체부가 되도록 일찍 도착하기를 바라기 때문에 우체국과 다음과 같은 계약을 맺는다. 마을 ii가 우체부가 방문한 서로 다른 마을 중 kk번째라고 하자. 즉, 우체부가 마을 ii에 처음 도착하기 전에 이미 서로 다른 마을 k−1k-1개를 방문했다는 뜻이다. 만약 k≤w(i)k \le w(i)이면 마을이 우체국에 w(i)−kw(i) - k 유로를 지불하고, k>w(i)k > w(i)이면 우체국이 마을에 k−w(i)k - w(i) 유로를 지불한다. 여기에 더해, 우체국은 경로에서 연속한 두 마을 사이를 이동할 때마다 우체부에게 1유로를 지불한다.

마을은 nn개이며 11번부터 nn번까지 번호가 매겨져 있다. 우체국은 11번 마을에 있으므로 경로는 반드시 11번 마을에서 시작한다. 각 마을에서는 정확히 22개, 44개 또는 88개의 도로가 만난다. 두 마을을 잇는 도로가 여러 개 있을 수도 있고, 한 마을에서 나와 같은 마을로 돌아오는 도로가 있을 수도 있다.

모든 유효한 경로 중에서 우체국이 얻을 수 있는 최대 총이익을 유로 단위로 구하여라. 만약 어떤 경로를 택해도 우체국이 손해를 본다면, 손해가 가장 적은 경우를 음수로 출력한다.

입력

첫째 줄에 두 정수 nn과 mm이 공백 하나로 구분되어 주어진다. nn은 마을의 수(1≤n≤2001 \le n \le 200), mm은 도로의 수이다.

다음 nn개의 줄에는 각각 양의 정수가 하나씩 주어진다. i+1i+1번째 줄의 값은 w(i)w(i)(1≤w(i)≤10001 \le w(i) \le 1000)로, 마을 ii가 우체국에 지불하는 기본 금액이다(위 계약에 따라 조정된다).

그다음 mm개의 줄에는 각각 두 정수가 공백 하나로 구분되어 주어지며, 해당 도로가 잇는 두 마을의 번호를 나타낸다.

출력

우체국이 얻을 수 있는 최대 총이익을 유로 단위 정수 하나로 출력한다. 이 값은 음수일 수 있다.

힌트

예제2

  1. 예제 1

    입력
    6 7
    1
    7
    4
    10
    20
    5
    2 4
    1 5
    2 1
    4 5
    3 6
    1 6
    1 3
    
    예상 출력
    19
    
  2. 예제 2

    입력
    1 1
    5
    1 1
    
    예상 출력
    3