专栏文章

题解:CF639B Bear and Forgotten Tree 3

CF639B题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minqh005
此快照首次捕获于
2025/12/02 06:41
3 个月前
此快照最后确认于
2025/12/02 06:41
3 个月前
查看原文
一道简单构造题。 先构造出两条链(如图)。
CPP
            1
           / \
          2  h + 2
         /     \
        .       .
       .         .
      .           .
     /             \
    h               d
   /                 \
 h + 1              d + 1
此时还剩下一些点,
这时分类讨论,
{将剩下的点挂在除根和叶子外的任意节点d=h将剩下的点挂在根上dh\begin{cases} 将剩下的点挂在除根和叶子外的任意节点 & d=h \\ 将剩下的点挂在根上 & d \ne h\end{cases}
然后 d>2hd>2*h 是无解的,d=h=1d=h=1n>2n>2 的时候也无解。
code:
CPP
#include <bits/stdc++.h>
using namespace std;

int n, d, h;

int main() {
	cin >> n >> d >> h;
	if (d > 2 * h || (d == 1 && h == 1 && n > 2)) { // 特判
		cout << "-1\n";
		return 0;
	}
	for (int i = 2; i <= h + 1; i ++) cout << i - 1 << " " << i << "\n";
	for (int i = h + 2; i <= d + 1; i ++) cout << (i == h + 2 ? 1 : i - 1) << " " << i << "\n";
	for (int i = d + 2; i <= n; i ++) cout << (d == h ? 2 : 1) << " " << i << "\n";
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...