1 条题解

  • 0
    @ 2026-6-19 10:30:24

    📝 题目大意

    给定一个包含 15 个节点的特定图,判断编号为 aabb 的两个节点是否被一条边直接相连。

    💡 解题思路

    1. 题目分析:题目给出的图实际上是一棵深度为 33完全二叉树,节点编号 111515。约束条件 1a<b151 \leq a < b \leq 15 保证了 aa 是较小编号(可能为父节点),bb 是较大编号(可能为子节点)。

    2. 算法推导:在完全二叉树的数组表示中,节点 ii 的左子节点为 2i2i,右子节点为 2i+12i+1。因此两点相连当且仅当 bbaa 的直接子节点,即满足 b=2ab = 2ab=2a+1b = 2a + 1

    3. 边界与细节

      • 输入保证 a<ba < b,因此只需判断 bb 是否为 aa 的子节点,无需双向判断。
      • 注意 aa 可能为 8158 \sim 15(叶子节点),此时 2a2a2a+12a+1 均大于 1515,不可能满足条件,自动输出 No

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅做常数次比较与输出。
    • 空间复杂度O(1)O(1),仅使用两个整数变量。

    💻 标准代码 (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
    上传者