阅读程序(第三题):树上直径(相距最远的两点距离)

xr729774 组合题 共 个子题

(说明:输入第一行为结点个数 n,第二行为 n − 1 个整数,依次表示结点 2 ∼ n 的父结点编号,满足 2 ≤ n ≤ 100000 且 1 ≤ fa[i] < i,根结点为 1。)

#include <iostream>
using namespace std;
int n,fa[100007],f[100007],ans;
int main() {
    cin >> n;
    for (int i = 2; i <= n; ++i) {
        cin >> fa[i];
    }
    for (int i = n; i >= 2; --i) {
        if (f[fa[i]] + f[i] + 1 > ans) {
            ans = f[fa[i]] + f[i] + 1;
        }
        if (f[i] + 1 > f[fa[i]]) {
            f[fa[i]] = f[i] + 1;
        }
    }
    cout << ans << endl;
    return 0;
}

子题 单选题

程序输出的 ans 表示的是( )。

A

树中距离最远的两个结点之间路径所经过的边数

B

根结点 1 到最远叶子结点之间路径所经过的边数

C

树中叶子结点的个数

D

所有结点的父结点编号之和

子题 单选题

当 n = 7,fa[2] ∼ fa[7] = {1,1,2,2,3,3} 时,输出为( )。

A

2

B

3

C

4

D

5

子题 单选题

当 n = 10,满足输出为 9 的合法输入种类数为( )。

A

0

B

9

C

256

D

512

子题 判断题

当 n = 5,fa[2] ∼ fa[5] = {1,2,3,4} 时,程序输出 4。( )

A

正确

B

错误

子题 判断题

程序输出前,f[1] 的值一定等于 ans 的值。( )

A

正确

B

错误

子题 判断题

将第 10∼12 行与第 13∼15 行两个 if 语句的顺序交换后,程序的输出结果不受影响。( )

A

正确

B

错误

正在加载题目数据…
已答 /
子题
该题型需在试卷/作业中作答,单题练习暂不支持
答案解析
讨论
发布
登录后参与讨论 立即登录
发布讨论需先绑定并验证手机号 去绑定手机号
加载中…
我
我
回复 @
回复 @
发送
还没有人讨论,来发表第一条吧