만드는 중입니다

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

빠른 알고리즘

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

요약
약한 연결된 방향 그래프에서 트리보다 간선이 최대 1500개 많을 때, 가중치 합이 가장 작은 방향 사이클을 찾아 그 값을 출력합니다. 사이클이 없으면 -1을 출력합니다.
난이도

보통10점 중 7점

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

문제

Little I는 유향 그래프에서 최소 사이클을 O(n+m)O(n + m) 시간에 찾는 알고리즘을 고안했다. 이제 그는 여러분의 실력을 시험하려 한다.

정점 nn개와 간선 mm개로 이루어진 유향 그래프가 주어진다. 각 간선에는 양의 정수 가중치가 있다. 간선 가중치의 합이 최소가 되는 사이클을 찾아, 그 합의 최솟값을 출력하라. 사이클이 없으면 그 사실을 보고하라.

O(n+m)O(n + m) 알고리즘을 모를 수 있으므로, Little I는 조건을 완화했다. 입력 그래프는 약한 연결 그래프임이 보장되고, m−nm - n은 그리 크지 않다. 방향 간선을 모두 무방향 간선으로 바꿨을 때 연결된 무방향 그래프가 되면 약한 연결 그래프이다.

입력

첫째 줄에 정점의 수 nn과 간선의 수 mm이 주어진다 (1≤n≤3⋅1051 \le n \le 3 \cdot 10^5, −1≤m−n≤1500-1 \le m - n \le 1500).

이어지는 mm개의 줄에는 정수 uiu_i, viv_i, wiw_i가 주어진다 (1≤ui,vi≤n1 \le u_i, v_i \le n, 1≤wi≤1091 \le w_i \le 10^9). 이는 정점 uiu_i에서 viv_i로 향하고 가중치가 wiw_i인 간선을 뜻한다. 그래프는 약한 연결 그래프이다.

출력

최소 사이클의 길이를 한 줄에 출력한다. 사이클이 없으면 −1-1을 출력한다.

힌트

첫 번째 예제에서 최소 사이클은 1→2→4→3→11 \to 2 \to 4 \to 3 \to 1이다.

예제3

  1. 예제 1

    입력
    4 6
    1 2 1
    4 3 3
    4 1 9
    2 4 1
    3 1 2
    3 2 6
    
    예상 출력
    7
    
  2. 예제 2

    입력
    1 0
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    1 1
    1 1 1
    
    예상 출력
    1