만드는 중입니다

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

깨진 최소 스패닝 트리

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

요약
연결된 그래프의 spanning tree가 주어질 때, 이를 최소 신장 트리로 만드는 데 필요한 간선 교체 횟수의 최솟값을 구하고 교체할 간선 쌍을 출력합니다.
난이도

보통10점 중 7점

유형
최소 신장 트리, 그래프
정답자
아직 제출이 없습니다

문제

Ethan은 가중치가 있는 연결된 무방향 그래프의 최소 스패닝 트리를 찾는 일을 맡았다. 그러나 그는 과제를 잘못 이해해서, 최소가 아닐 수도 있는 스패닝 트리를 찾았다. 이 스패닝 트리를 최소 스패닝 트리로 만들기 위해 간선 교환을 순서대로 수행한다. 간선 교환은 스패닝 트리에서 간선 하나를 제거하고, 그래프에 있지만 현재 스패닝 트리에 없는 간선 하나를 추가하는 것이다. 매번의 교환 후에도 트리는 반드시 스패닝 트리여야 한다. Ethan의 최소 스패닝 트리를 고치려면 최소 몇 번의 간선 교환이 필요한가?

입력

첫 줄에 두 정수 nn (2≤n≤2 0002 \le n \le 2\,000)과 mm (n−1≤m≤3 000n-1 \le m \le 3\,000)이 주어진다. nn은 정점의 수, mm은 간선의 수이다. 정점은 11부터 nn까지 번호가 매겨져 있다.

이어지는 mm개의 줄에는 각각 세 정수 uu, vv (1≤u,v≤n1 \le u,v \le n, u≠vu \ne v), ww (1≤w≤1091 \le w \le 10^9)가 주어진다. 이는 가중치 ww인 간선이 정점 uu와 vv를 잇는다는 뜻이다. 간선은 11부터 mm까지 번호가 매겨져 있다.

그래프는 연결되어 있다. 입력의 처음 n−1n-1개 간선은 Ethan의 초기 스패닝 트리이다. 그래프는 단순 그래프가 아닐 수 있어서, 같은 두 정점 사이에 간선이 여러 개 있을 수 있다.

출력

최소 간선 교환 횟수 kk를 정수 하나로 출력한다. 이는 스패닝 트리를 최소 스패닝 트리로 만드는 데 필요한 최소 횟수이다. 이어서 kk개의 줄에 정수 aa와 bb를 출력한다. aa는 제거할 간선의 번호, bb는 추가할 간선의 번호이다. kk번의 교환이 문제를 해결하는 방법이 여러 가지라면, 그중 어느 것을 출력해도 된다.

예제1

  1. 예제 1

    입력
    4 4
    1 2 10
    2 3 3
    3 4 1
    1 4 4
    
    예상 출력
    1
    1 4