만드는 중입니다

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

빠른 신장 트리

시간 제한5초메모리 제한512 MB

요약
정점 가중치와 조건부 간선 m개가 주어질 때, 두 성분의 무게 합이 s 이상이면 추가되는 간선의 번호를 순서대로 구합니다.
난이도

어려움10점 중 8점

유형
유니온 파인드, 분할 정복, 정렬
정답자
아직 제출이 없습니다

문제

왕슈한은 처음에 간선이 하나도 없는 무방향 그래프를 정점 nn개로 갖고 있다.

각 정점에는 0 이상의 정수인 가중치가 있다.

또 왕슈한은 튜플 mm개 (ai,bi,si)(a_i, b_i, s_i)를 갖고 있다. 여기서 1≤ai,bi≤n1 \le a_i, b_i \le n, ai≠bia_i \ne b_i이고, sis_i는 0 이상의 정수이다.

이후 다음 과정을 시작한다.

  • 서로 다른 연결 요소에 속하면서 (aia_i가 속한 연결 요소의 가중치 합) + (bib_i가 속한 연결 요소의 가중치 합) ≥si\ge s_i를 만족하는 ii가 없으면 과정을 끝낸다.
  • 그렇지 않으면 그러한 ii 중 가장 작은 값을 골라 aia_i와 bib_i 사이에 간선을 추가하고, ii를 메모장에 적은 뒤, 더 커진 그래프에서 과정을 반복한다.

과정이 끝난 뒤 불행한 일이 생겼다. 누군가 그의 메모장을 훔쳐 갔다! 적혀 있던 숫자들을 효율적으로 모두 복원하도록 도와줄 수 있겠는가?

입력

첫 줄에는 정수 nn과 mm이 주어진다. nn은 그래프의 정점 수이고, mm은 튜플의 개수이다 (1≤n,m≤300 0001 \le n, m \le 300\,000).

둘째 줄에는 정점들의 가중치 w1,w2,…,wnw_1, w_2, \ldots, w_n이 공백으로 구분되어 주어진다 (0≤wi≤1060 \le w_i \le 10^6).

다음 mm개 줄에는 각각 정수 aia_i, bib_i, sis_i가 주어진다 (1≤ai,bi≤n1 \le a_i, b_i \le n, ai≠bia_i \ne b_i, 0≤si≤1060 \le s_i \le 10^6).

출력

첫 줄에는 메모장에 적힌 정수의 개수를 출력한다. 다음 줄에는 적은 순서대로 모든 정수를 공백으로 구분하여 출력한다.

예제2

  1. 예제 1

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

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