#P15759. 被偷走的生成笔记

被偷走的生成笔记

题目描述

王修涵手里有一张初始为空的无向图,图上有 nn 个顶点。每个顶点都有一个非负整数权值。

此外,他有 mm 个三元组 (ai,bi,si)(a_i,b_i,s_i),其中 aibia_i\ne b_isis_i 为非负整数。

接着,他开始执行下面的过程:

  1. 如果不存在某个下标 ii,满足 aia_ibib_i 当前位于不同连通块,并且
$$\text{sum}(a_i\text{ 所在连通块})+\text{sum}(b_i\text{ 所在连通块})\ge s_i,$$

则过程结束。

  1. 否则,选择满足条件的最小下标 ii,在图中加入一条连接 aia_ibib_i 的边,把这个 ii 写进笔记本,然后回到第 1 步。

这里 sum()\text{sum}(\cdot) 表示对应连通块中所有顶点权值之和。

过程结束后,倒霉的事发生了:有人偷走了他的笔记本。请你帮他恢复笔记本中依次写下的所有下标。

输入格式

第一行包含两个整数 n,mn,m,分别表示图中顶点数和三元组数量。

第二行包含 nn 个整数 w1,w2,,wnw_1,w_2,\ldots,w_n,表示每个顶点的权值。

接下来 mm 行,每行包含三个整数 ai,bi,sia_i,b_i,s_i,表示一个三元组。

输出格式

第一行输出一个整数,表示笔记本中写下的下标数量。

第二行按写入顺序输出所有这些下标。若数量为 00,第二行可为空。

数据范围

  • 1n,m3000001\le n,m\le 300000
  • 0wi1060\le w_i\le 10^6
  • 1ai,bin1\le a_i,b_i\le n
  • aibia_i\ne b_i
  • 0si1060\le s_i\le 10^6

样例 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

输入

3 5
3 2 2
1 2 6
1 2 6
1 2 3
1 2 6
2 3 6

输出

2
3 5