组合题
#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;}

说明:输入第一行为结点个数 nn,第二行为 n−1n - 1 个整数,依次表示结点 2—nn 的父结点编号,满足 2≤n≤100002 \le n \le 10000 且 1≤fa[i]<i1 \le fa[i] < i,根结点为 1。

第 28 题判断题原卷 1.5 分

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

填写答案
第 29 题判断题原卷 1.5 分

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

填写答案
第 30 题判断题原卷 1.5 分

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

填写答案
第 31 题单选题原卷 3 分

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

填写答案
第 32 题单选题原卷 3 分

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

填写答案
第 33 题单选题原卷 3 分

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

填写答案