#CF1100E. Andrew and Taxi
Andrew and Taxi
好的,这是您要求的算法题面中文翻译和排版:
E. Andrew 与出租车
时间限制:每个测试点 秒
内存限制:每个测试点 MB
输入:标准输入
输出:标准输出
Andrew 比起其他交通工具更偏爱出租车,但最近大多数出租车司机行为不当。为了赚更多钱,出租车司机开始绕圈行驶。Andrew 所在城市的道路都是单行道,人们不一定能从城市的一个区域到达另一个区域,但与那些阴险的出租车司机相比,这就不算什么了。
市长决定改变某些道路的方向,使得出租车司机无法无限增加行程费用。更正式地说,如果出租车司机位于某个十字路口,那么他无法通过一次非零行程再次回到该路口。
为了改变道路的方向,需要交通管制员。对于每条道路,已知将其方向反向需要多少名交通管制员。允许逐条改变道路的方向,这意味着每个交通管制员可以参与反转两条或更多条道路。
你需要计算完成任务所需的最少交通管制员数量,以及需要反转的道路列表。
输入
第一行包含两个整数 和 (,)—— 分别表示城市中十字路口的数量和道路的数量。
接下来的 行每行包含三个整数 、 和 (,,)—— 分别表示道路的起点十字路口、终点十字路口以及反转该道路所需的交通管制员数量。
输出
第一行输出两个整数:完成任务所需的最少交通管制员数量,以及需要反转的道路数量 。 不需要最小化。
第二行输出 个由空格分隔的整数 —— 需要反转方向的道路编号。道路按照输入顺序从 开始编号。如果有多种解,输出任意一种即可。
输入样例 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
注释
在第一个示例中有两个简单环: 和 。一个交通管制员只能反转道路 ,但无法独自破坏第二个环。两个交通管制员可以反转道路 和 ,从而满足条件。
在第二个示例中,一个交通管制员无法破坏环 。借助三个管制员,我们可以反转道路 、 和 。