1 条题解
-
0
📝 题目大意
给定一个包含 15 个节点的特定图,判断编号为 和 的两个节点是否被一条边直接相连。
💡 解题思路
-
题目分析:题目给出的图实际上是一棵深度为 的完全二叉树,节点编号 到 。约束条件 保证了 是较小编号(可能为父节点), 是较大编号(可能为子节点)。
-
算法推导:在完全二叉树的数组表示中,节点 的左子节点为 ,右子节点为 。因此两点相连当且仅当 是 的直接子节点,即满足 或 。
-
边界与细节:
- 输入保证 ,因此只需判断 是否为 的子节点,无需双向判断。
- 注意 可能为 (叶子节点),此时 和 均大于 ,不可能满足条件,自动输出
No。
⏱️ 复杂度分析
- 时间复杂度:,仅做常数次比较与输出。
- 空间复杂度:,仅使用两个整数变量。
💻 标准代码 (C++)
#include<bits/stdc++.h> using namespace std; int a,b; int main(){ cin.tie(0),cout.tie(0); ios::sync_with_stdio(0); cin>>a>>b; // 完全二叉树中,节点 i 的左右子节点分别是 2*i 和 2*i+1 // 由于 a < b,只需判断 b 是否为 a 的子节点 if(b==2*a||b==2*a+1) cout<<"Yes"; else cout<<"No"; return 0; } -
- 1
信息
- ID
- 668
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者