#CF1100E. Andrew and Taxi

Andrew and Taxi

好的,这是您要求的算法题面中文翻译和排版:


E. Andrew 与出租车

时间限制:每个测试点 22
内存限制:每个测试点 256256 MB
输入:标准输入
输出:标准输出

Andrew 比起其他交通工具更偏爱出租车,但最近大多数出租车司机行为不当。为了赚更多钱,出租车司机开始绕圈行驶。Andrew 所在城市的道路都是单行道,人们不一定能从城市的一个区域到达另一个区域,但与那些阴险的出租车司机相比,这就不算什么了。

市长决定改变某些道路的方向,使得出租车司机无法无限增加行程费用。更正式地说,如果出租车司机位于某个十字路口,那么他无法通过一次非零行程再次回到该路口。

为了改变道路的方向,需要交通管制员。对于每条道路,已知将其方向反向需要多少名交通管制员。允许逐条改变道路的方向,这意味着每个交通管制员可以参与反转两条或更多条道路。

你需要计算完成任务所需的最少交通管制员数量,以及需要反转的道路列表。

输入

第一行包含两个整数 nnmm1n1000001 \le n \le 1000001m1000001 \le m \le 100000)—— 分别表示城市中十字路口的数量和道路的数量。

接下来的 mm 行每行包含三个整数 uiu_iviv_icic_i1ui,vin1 \le u_i, v_i \le n1ci1091 \le c_i \le 10^9uiviu_i \ne v_i)—— 分别表示道路的起点十字路口、终点十字路口以及反转该道路所需的交通管制员数量。

输出

第一行输出两个整数:完成任务所需的最少交通管制员数量,以及需要反转的道路数量 kkkk 不需要最小化。

第二行输出 kk 个由空格分隔的整数 —— 需要反转方向的道路编号。道路按照输入顺序从 11 开始编号。如果有多种解,输出任意一种即可。

输入样例 1

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

输出样例 1

2 2
1 3

输入样例 2

5 7
2 1 5
3 2 3
1 3 3
2 4 1
4 3 5
5 4 1
1 5 3

输出样例 2

3 3
3 4 7

注释

在第一个示例中有两个简单环:15211 \to 5 \to 2 \to 1234522 \to 3 \to 4 \to 5 \to 2。一个交通管制员只能反转道路 212 \to 1,但无法独自破坏第二个环。两个交通管制员可以反转道路 212 \to 1232 \to 3,从而满足条件。

在第二个示例中,一个交通管制员无法破坏环 13211 \to 3 \to 2 \to 1。借助三个管制员,我们可以反转道路 131 \to 3242 \to 4151 \to 5