Codeforces Round 287 (Div. 2)
E
Breaking Good
Codeforces
2100
原题
← D→
翻译中…

Breaking Good is a new video game which a lot of gamers want to have. There is a certain level in the game that is really difficult even for experienced gamers.

翻译中…

Walter William, the main character of the game, wants to join a gang called Los Hermanos (The Brothers). The gang controls the whole country which consists of $*n*$ cities with $*m*$ bidirectional roads connecting them. There is no road is connecting a city to itself and for any two cities there is at most one road between them. The country is connected, in the other words, it is possible to reach any city from any other city using the given roads.

翻译中…

The roads aren't all working. There are some roads which need some more work to be performed to be completely functioning.

翻译中…

The gang is going to rob a bank! The bank is located in city $1$. As usual, the hardest part is to escape to their headquarters where the police can't get them. The gang's headquarters is in city $*n*$. To gain the gang's trust, Walter is in charge of this operation, so he came up with a smart plan.

翻译中…

First of all the path which they are going to use on their way back from city $1$ to their headquarters $*n*$ must be as short as possible, since it is important to finish operation as fast as possible.

翻译中…

Then, gang has to blow up all other roads in country that don't lay on this path, in order to prevent any police reinforcements. In case of non-working road, they don't have to blow up it as it is already malfunctional.

翻译中…

If the chosen path has some roads that doesn't work they'll have to repair those roads before the operation.

翻译中…

Walter discovered that there was a lot of paths that satisfied the condition of being shortest possible so he decided to choose among them a path that minimizes the total number of affected roads (both roads that have to be blown up and roads to be repaired).

翻译中…

Can you help Walter complete his task and gain the gang's trust?

翻译中…

Input

翻译中…

The first line of input contains two integers $*n*, *m*$ ($2 ≤ *n* ≤ 10^{5}$, image), the number of cities and number of roads respectively.

翻译中…

In following $*m*$ lines there are descriptions of roads. Each description consists of three integers $*x*, *y*, *z*$ ($1 ≤ *x*, *y* ≤ *n*$, image) meaning that there is a road connecting cities number $*x*$ and $*y*$. If $*z* = 1$, this road is working, otherwise it is not.

翻译中…

Output

翻译中…

In the first line output one integer $*k*$, the minimum possible number of roads affected by gang.

翻译中…

In the following $*k*$ lines output three integers describing roads that should be affected. Each line should contain three integers $*x*, *y*, *z*$ ($1 ≤ *x*, *y* ≤ *n*$, image), cities connected by a road and the new state of a road. $*z* = 1$ indicates that the road between cities $*x*$ and $*y*$ should be repaired and $*z* = 0$ means that road should be blown up.

翻译中…

You may output roads in any order. Each affected road should appear exactly once. You may output cities connected by a single road in any order. If you output a road, it's original state should be different from $*z*$.

翻译中…

After performing all operations accroding to your plan, there should remain working only roads lying on some certain shortest past between city $1$ and $*n*$.

翻译中…

If there are multiple optimal answers output any.

翻译中…

Note

翻译中…

In the first test the only path is $1 - 2$

翻译中…

In the second test the only shortest path is $1 - 3 - 4$

翻译中…

In the third test there are multiple shortest paths but the optimal is $1 - 4 - 6 - 8$

翻译中…

样例

Input #1
2 1
1 2 0
Output #1
1
1 2 1
InputCopy OutputCopy
Input #2
4 4
1 2 1
1 3 0
2 3 1
3 4 1
Output #2
3
1 2 0
1 3 1
2 3 0
InputCopy OutputCopy
Input #3
8 9
1 2 0
8 3 0
2 3 1
1 4 1
8 7 0
1 5 1
4 6 1
5 7 0
6 8 0
Output #3
3
2 3 0
1 5 0
6 8 1
InputCopy OutputCopy
题目信息
题号
507E
时间限制
2 s
内存限制
256 MB
标签
DFS 及类似
动态规划
图论
最短路

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。