AT_arc152_d [ARC152D] Halftree
题目描述
有一个包含 $N$ 个顶点的无向图,顶点编号为 $0$ 到 $N-1$,初始时没有任何边。你可以任意添加边到这个图中。然后,在你添加完所有边后,使用给定的 $K$,执行如下操作恰好一次:
- 对于你添加的每一条边,设其两端顶点为 $u, v$,则在顶点 $(u+K)\bmod N$ 和 $(v+K)\bmod N$ 之间也添加一条边。即使这两个顶点之间已经有边,也会再添加一条,因此可能会出现重边。
对于给定的 $N, K$,请你构造一组你需要添加的边,使得经过上述操作后,最终的图是一个树。如果不存在这样的边集,请指出。
输入格式
输入从标准输入读入,格式如下:
> $N$ $K$
输出格式
如果存在满足条件的边集,输出边的数量 $M$,以及每条边连接的两个顶点 $a_i, b_i$,格式如下。要求 $0\leq M\leq N$,所有输出均为整数。边和顶点的顺序不限。
> $M$ $a_1$ $b_1$ $a_2$ $b_2$ $\cdots$ $a_M$ $b_M$
如果不存在满足条件的边集,输出 `-1`。
说明/提示
### 限制
- $2\leq N\leq 2\times 10^5$
- $1\leq K\leq N-1$
- 输入的所有值均为整数
### 样例解释 1
执行操作后,会添加边 $4$-$0$ 和 $4$-$1$。因此,最终生成了一棵树,这是一种合法的输出。
### 样例解释 2
不存在一种方法使得操作后的图为树。
由 ChatGPT 4.1 翻译