만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

There and Back Again

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

요약
1번 도시에서 n번 도시까지 갔다가 돌아오는 두 이동 경로의 도로 집합이 서로 달라야 할 때, 두 이동 시간의 합이 가장 작은 값을 구합니다. 조건을 만족하는 쌍이 없으면 -1을 출력합니다.
난이도

보통10점 중 7점

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

문제

도시는 11번부터 nn번까지 번호가 붙은 nn개가 있습니다. 2024 ICPC Asia Pacific Championship 대회는 도시 nn번인 하노이에서 열립니다.

도로는 11번부터 mm번까지 번호가 붙은 mm개의 양방향 도로가 있습니다. 도로 ii는 도시 uiu_i와 viv_i를 잇고, 어느 방향으로 이동하든 tit_i의 시간이 걸립니다. 각 도로는 서로 다른 두 도시를 잇고, 서로 다른 도로는 서로 다른 도시 쌍을 잇습니다.

당신은 도시 11번에 삽니다. 대회에 참가하려고 도로를 따라 도시 nn번까지 간 뒤, 다시 도로를 따라 도시 11번으로 돌아오려 합니다. 같은 경로를 되풀이하면 지루하므로, 두 이동의 경로는 달라야 합니다. 두 경로가 다르다는 것은 한 경로가 지나는 서로 다른 도로의 집합이 다른 경로의 도로 집합과 다르다는 뜻입니다.

각 이동에서는 같은 도시나 같은 도로를 여러 번 지나도 됩니다. 목적지인 도시 11번이나 도시 nn번에 도착한 뒤에도 계속 이동해도 됩니다. 이동 시간은 지나간 도로들의 시간을 모두 더한 값입니다. 한 도로를 여러 번 지나면 그 도로의 시간도 지난 횟수만큼 더합니다.

위 조건을 만족하는 두 이동의 총 이동 시간의 최솟값을 구하세요. 조건을 만족할 수 없다면 그 사실을 알려주세요.

입력

첫 줄에 두 정수 nn과 mm이 주어집니다 (2≤n≤100 0002 \le n \le 100\,000; 1≤m≤min⁡(n(n−1)2,300 000)1 \le m \le \min(\frac{n(n-1)}{2}, 300\,000)). 이어지는 mm개의 줄에는 각각 세 정수 uiu_i, viv_i, tit_i가 주어집니다 (1≤ui<vi≤n1 \le u_i < v_i \le n; 1≤ti≤10001 \le t_i \le 1000). 서로 다른 도로는 서로 다른 도시 쌍을 잇습니다.

출력

조건을 만족하는 두 이동의 총 이동 시간의 최솟값을 정수 하나로 출력합니다. 그런 두 이동이 없으면 −1-1을 출력합니다.

예제4

  1. 예제 1

    입력
    3 2
    1 2 10
    1 3 5
    
    예상 출력
    30
    
  2. 예제 2

    입력
    4 3
    1 2 10
    2 3 5
    3 4 2
    
    예상 출력
    -1
    
  3. 예제 3

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

    입력
    3 1
    1 2 1000
    
    예상 출력
    -1