思路:

用结构体Person{

int father;

int bf;

vector<int> son;

} p[100001];
/*

p[i].father表示表示第i个人的上一辈编号

p[i].bf表示第i个人的辈分

p[i].son 表示第i个人的儿子们

*/

用队列从祖宗开始 下一代等于上一代的辈分加一 祖宗辈分为1

代码如下:

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
int n,maxBF=1,zz;

/* 
    p[i].father表示表示第i个人的上一辈编号 
    p[i].bf表示第i个人的辈分 
    p[i].son 表示第i个人的儿子们 
*/    
struct Person{
    int father;  
    int bf;
    vector<int> son;
}p[100001]; 
         
void getBF();

int main()
{
    int flag = 1;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>p[i].father;
        if(p[i].father != -1)
            p[p[i].father].son.push_back(i); //在i的上一辈的儿子数组中添加 i 
        else{                                 //i是祖宗 
            zz = i;
            p[i].bf = 1;
        } 
    } 
    getBF();
    cout<<maxBF<<endl;
    for(int i=1;i<=n;i++){
        if(p[i].bf == maxBF){
            if(flag){
                cout<<i;
                flag = 0;
            }
            else
                cout<<" "<<i;
        }
    }
    cout<<endl;
    return 0;    
}

void getBF()
{
    queue<int> q;
    q.push(zz);
    while(!q.empty()){
        int t = q.front();
        q.pop();
        for(int i=0;i<p[t].son.size();i++){
            int son = p[t].son[i];
            p[son].bf = p[t].bf + 1;
            if(p[son].bf>maxBF)
                maxBF = p[son].bf;
            q.push(son);
        }
    }
}

PATL2_026 小字辈相关推荐

  1. 【PAT天梯】【L2-2 小字辈(左子右兄加强版)】(树,水题)

    题干: L2-2 小字辈(左子右兄加强版) (25 分) 本题给定一个庞大家族的家谱,要请你给出最小一辈的名单. 需要注意的是,家族成员的输入方式,是按照"Left-child Right- ...

  2. 【CCCC】L2-026 小字辈 (25分),求多叉树的深度和底层叶节点

    problem L2-026 小字辈 (25分) 本题给定一个庞大家族的家谱,要请你给出最小一辈的名单. 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) -- 简单起 ...

  3. FRECO联盟探营:未来还看这些“小字辈”

    点击上方 "中国云报" 可直接关注 ! FRECO联盟刚刚一岁,就已经在混合云方面展现出强大的实力和潜力.而FIT2CLOUD.XSKY虽然是"小字辈",却敢于 ...

  4. 小字辈(左子右兄加强版)

    本题给定一个庞大家族的家谱,要请你给出最小一辈的名单. 需要注意的是,家族成员的输入方式,是按照"Left-child Right-sibling"(左儿子 右兄弟)的格式 [敲黑 ...

  5. 【L2-026 小字辈】天梯赛L2系列详解

    天梯赛L2-026 小字辈 (25 分) 题目详情: 输入样例: 9 2 6 5 5 -1 5 6 4 7 输出样例: 4 1 9 思路: 这个题目当时写了一种递归的方法,但是递归的不好,测试数据太大 ...

  6. 7-5 小字辈 (25 分)

    暑假字符串专题HBU程序设计训练营总结 ?点这里 7-5 小字辈 (25 分) 本题给定一个庞大家族的家谱,要请你给出最小一辈的名单. 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 0 ...

  7. 刷题之完全二叉树的权值和小字辈及根据后序和中序遍历输出先序遍历

    1.完全二叉树的权值 1)题目 给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从 上到下.从左到右的顺序依次是 A1, A2, ··· AN,如下图所示: 现在小明要把相同深度的节 ...

  8. L2-026 小字辈

    L2-026 小字辈 (25 分) 本题给定一个庞大家族的家谱,要请你给出最小一辈的名单. 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) -- 简单起见,我们把家族 ...

  9. 小字辈(左子右兄加强版)(C语言版)

    本题给定一个庞大家族的家谱,要请你给出最小一辈的名单. 需要注意的是,家族成员的输入方式,是按照"Left-child Right-sibling"(左儿子 右兄弟)的格式 [敲黑 ...

最新文章

  1. 实现word在线预览 有php的写法 也有插件似
  2. oauth过滤login_OAuth2AuthenticationProcessingFilter资源认证服务器过滤器
  3. python读取压缩包中csv文件
  4. Rabbitmq如何保证消息顺序执行
  5. 1019. 链表中的下一个更大节点
  6. a标签在ie6和ie7下面换行显示问题解析
  7. centos服务器 常用命令
  8. 割点(tarjan算法)
  9. 联想笔记本linux无线网卡,科学网—配置lenovo E430 + Ubuntu 13.04无线网卡 - 彭友松的博文...
  10. 貂蝉待你玩转Java王者荣耀
  11. Canvas--文字
  12. 三星oneui主屏幕费电_三星最新力作,第三方桌面无处遁形,OneUI越来越自由
  13. Amazon Shield Advanced 更新 – 自动应用程序层 DDoS 防御
  14. Ubuntu安装Caffe .build_release/tools/caffe: error while loading shared libraries: libcudart.so.8.0
  15. Datawhale数据挖掘 数据分析笔记
  16. 解决office2003,无法卸载也无法安装问题
  17. dxp全称_DXP企业标志logo设计,品牌vi设计策划
  18. ZOJ:1203 Swordfish
  19. 经典sql,高级sql
  20. OpenGL植物建模(附完整代码、注释清晰、分步讲解)

热门文章

  1. Consistent-Teacher
  2. 20.【C/C++ 指针数组和数组指针 (超详版)】
  3. TeamCity Agent安装
  4. RabbitMQ第一种消息模型--直连模型
  5. stringByAppendingString与stringWithFormat
  6. copy文件的Linux程序代码,Linux下C语言实现CopyFile
  7. 古希腊历史的五个阶段
  8. wpa或者wpa2暴力破解WiFi(因为wep已经很少有人使用了,所以略过)
  9. 我再copy回来。中海真是有心人。
  10. Android开发——集成友盟推送SDK遇到的坑(一)