#CF1005F. D94 最短路径树 BFS 算法 Berland and the Shortest Paths

D94 最短路径树 BFS 算法 Berland and the Shortest Paths

CF1005F Berland and the Shortest Paths

题目描述

Berland 有 nn 座城市。一些城市通过道路连接。所有道路都是双向的。每条道路连接两个不同的城市。一对城市之间至多有一条道路。城市从 11nn 编号。

众所周知,从首都(编号为 11 的城市),您可以沿着道路移动并到达任何其他城市。

Berland 的总统计划改善该国的道路网。预算足以修复 n1n-1 道路。总统计划选择 n1n-1 条道路,要求:

  • 从首都出发沿着这 n1n-1 条道路走可以到达其他所有的城市。
  • 如果 did_i 表示首都到 ii 号城市所需经过的路的条数,沿着选择的 n-1 条路走所得的 d1d_1+d2d_2+・・・+dnd_n 应是最小的。

换句话说,这 n1n-1 条道路的应该保持国家的连通性,并且使从城市 11 到所有城市的距离的总和最小(你只能使用被选择的 n1n-1 道路)。

总统命令有关部门准备 kk 个可能的选择,选择的 n1n-1 条道路同时满足以上两个条件。

编写一个程序,找到 kk 种可能的方法来选择道路进行维修。如果少于 kk 种选法,则程序应输出所有可能的有效方式来选择道路。

输入格式

输入的第一行包含整数 n,m,k.n,m,k. (2(2 \leq n n \le 22 \cdot 105,10^5, n1n-1 \leq mm \leq 22 \cdot 105,10^5, 11 \leq kk \leq 22 \cdot 10510^5 ),), nn 是这个国家的城市数,mm 是道路数,并且 kk 是选 n1n-1 条道路修复的方案数。 数据保证 mk106.m \cdot k \leq 10^6.

接下来的 mm 行描述路的情况,每条路的描述占一行。每行包括两个整数 ai,bi(1ai,bin,aibi)a_i,b_i (1 \leq a_i,b_i\leq n,a_i \neq b_i)—— 第 ii 条道路连接的两座城市的编号。一对城市最多有一条路连接。给定的路足以使你从首都出发到达任意城市。

输出格式

输出 t(1tk)t (1 \leq t \leq k)— 可选择的方案数量。记得你需要找到 kk 种不同的可行解,如果解的个数少于 kk 种,你需要输出所有可行解。

在接下来的 tt 行中,输出道路选择情况,一种一行。用 mm 个字符的字符串输出选择情况,其中,第 jj 个字符表示第 jj 条道路是否被选中,若是则用 11 表示,若不是则用 00 表示。路应该按照它们输入的顺序编号。各种选择情况的输出没有指定顺序。tt 行的所有输出应该不同。

因为题目保证 mk106,tm \cdot k\leq 10^6,t 行输出的总长不超过 106.10^6.

如果有很多组答案,任意输出它们中的一些即可。

输入输出样例 #1

输入 #1

4 4 3
1 2
2 3
1 4
4 3

输出 #1

2
1110
1011

输入输出样例 #2

输入 #2

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

输出 #2

1
101001

输入输出样例 #3

输入 #3

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

输出 #3

2
111100
110110