CF240E Road Repairs
题目描述
一个名叫 Berland 的国家有 $n$ 个城市,它们被从 $1$ 到 $n$ 的整数编号。编号为 $1$ 的城市是这个国家的首都。一些城市两两之间有一条单向道路。然而,不是所有的路都是完好的。对于每一条路我们都知道是否需要修复。如果一条路需要修复,那么它就禁止被使用。但是,Berland 的政府可以修复道路然后这条路就可以用了。
现在 Berland 正在受到邻国战争的威胁。所以首都的官员决定往每个城市送一支军队。如果他们没有钱或者时间去建一条新路那么这些军队只能够通过完好的道路。然而,为了到达一些城市一些道路可能可以修复好。
当然国家需要很多的资源去战胜敌人,所以你想要小心地计划投入军队的资源。这就是 Berland 的政府想要尽可能地修复好最少的道路让军队能从首都到每一个城市的原因,给你一些路并告诉你这条路是好的还是要修复的。你的任务就是帮助 Berland 政府并找出哪些路需要被修复。
输入格式
第一行有两个整数 $n,m$($1 \leq n,m \leq 10^5$)——城市的数量和 Berland 的道路的数量。
接下来 $m$ 行包括 $3$ 个整数 $a_i$,$b_i$,$c_i$($1 \leq a_i,b_i \leq n$ ,$a_i \neq b_i$,$0 \leq c_i \leq 1$),描述的是一条从 $a_i$ 到 $b_i$ 的道路,如果 $c_i$ 等于 0,那么给的这条路就是好的;如果 $c_i$ 等于 1,那么
给的这条路就是需要修理的。
保证没有重边。
输出格式
如果修复了所有的道路以后还是不能到达每个城市,输出-1。否则,第一行输出有几条路需要修复,第二行输出需要修复的路的编号,用一个空格隔开。
道路从 1 开始编号,在输入中给出。
如果有多种方案,请输出任意一种。如果所有路都是好的,请只在第一行输出 0。