The MST (Meaningless State Team) company won another tender for an
important state reform in Berland.There are n cities in Berland, some pairs of the cities are connected
by roads. Each road has its price. One can move along any road in any
direction. The MST team should carry out the repair works on some set
of roads such that one can get from any city to any other one moving
only along the repaired roads. Moreover, this set should contain
exactly k capital roads (that is, the roads that start or finish in
the capital). The number of the capital is 1.As the budget has already been approved, the MST Company will profit
by finding the set with minimum lengths of roads.Input The first input line contains three integers n, m, k
(1 ≤ n ≤ 5000;0 ≤ m ≤ 105;0 ≤ k < 5000), where n is the number of
cities in the country, m is the number of roads in the country, k is
the number of capital roads in the required set. Then m lines
enumerate the roads in question. Each road is specified by three
numbers ai, bi, wi (1 ≤ ai, bi ≤ n; 1 ≤ w ≤ 105), where ai, bi are the
numbers of cities linked by a road and wi is its length.Between each pair of cities no more than one road exists. There are no
roads that start and finish in one city. The capital’s number is 1.Output In the first line print the number of roads in the required
set. The second line should contain the numbers of roads included in
the sought set. If the sought set does not exist, print -1.
经典的单点k度MST问题。
先用kruskal求出不含1的MST,应该是(除1以外)多个联通块。这样的话点1的度数至少是联通块个数,如果k不到,那么一定无解。否则先用边权最小的边连通起来,然后每次增加一条与1相连的边。加边以后会产生一个环,找到环上的最长边,就可以算出添加这条边的增量。每次选择增量最小的即可。
如何找到最长边?只要每次从1开始dfs一遍算出1到每个节