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

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

산유국

시간 제한2초메모리 제한1024 MB

요약
트리에 추가 도로가 M개 연결된 도시에서 통행료 도로 두 개를 골라 모든 최단 경로 통행료 합이 최대가 되도록 구합니다.
난이도

어려움10점 중 8점

유형
그래프, 최단 경로, 트리, DFS
정답자
아직 제출이 없습니다

문제

아제르바이잔은 지하자원이 풍부한 나라이다. 석유 생산량이 많아 국민들은 휘발유를 아주 싸게 쓸 수 있다.

수도 바쿠에는 NN개의 교차로와 M+N−1M+N-1개의 양방향 도로가 있다. 바쿠는 남북으로 길게 뻗은 도시이다. 교차로는 남북 방향으로 일직선으로 늘어서 있으며, 가장 북쪽 교차로부터 11번에서 NN번까지 번호가 붙어 있다.

도로는 오래된 도로와 신설 도로로 나뉜다. N−1N-1개의 오래된 도로는 각 ii (1≤i<N1 \le i < N)에 대해 ii번 교차로와 i+1i+1번 교차로를 연결한다. MM개의 신설 도로는 각각 오래된 도로로 연결되지 않은 서로 다른 교차로 두 개를 잇는다. 한 쌍의 교차로를 잇는 도로는 최대 11개이다.

수도 바쿠는 재정이 좋지 않아 도로 일부에 톨게이트를 설치하고 통행료를 받기로 했다. 너무 많은 도로에서 통행료를 받으면 시민들의 불만이 커지므로, 정확히 22개의 도로에서만 받는다. 통행료는 차 한 대가 톨게이트를 한 번 지날 때마다 11마나트(아제르바이잔 화폐 단위)이다. 한 자동차가 톨게이트 두 개를 지나면 두 번 모두 통행료를 낸다.

모든 교차로에는 각각 N−1N-1대의 자동차가 있다. 한 교차로의 자동차들은 모두 자신이 있는 교차로가 아닌 서로 다른 교차로로 간다. 교차로 uu에서 교차로 vv로 갈 때, 운전자는 통행료가 가장 적은 경로를 고른다. (이 나라는 휘발유가 저렴하다.)

모든 자동차가 목적지에 도착했을 때 가장 많은 통행료를 받을 수 있는 두 도로를 찾는 프로그램을 작성하라.

다음 함수를 작성해야 한다.

  • long long findEdges( int N, int A[], int B[] ) ; 최초에 한 번만 호출되는 함수이다. 교차로와 도로의 형태를 알려준다. NN은 교차로의 개수이다. AA와 BB는 각각 크기 MM인 배열(vector)이다. 교차로 A[i]번과 교차로 B[i]번이 신설 도로로 이어져 있다는 뜻이다. 단, ii는 00 이상 M−1M-1 이하이다. 주어진 교차로와 도로 상황에서 두 개의 도로에 톨게이트를 만들어 받을 수 있는 통행료의 최댓값을 리턴해야 한다.

예제3

  1. 예제 1

    입력
    4 3
    3 1
    2 4
    1 4
    
    예상 출력
    0
    
  2. 예제 2

    입력
    4 1
    1 3
    
    예상 출력
    8
    
  3. 예제 3

    입력
    4 0
    
    예상 출력
    14