【2018天梯赛】L2-026. 小字辈

本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。

输入格式:

输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。

输出格式:

首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以一个空格分隔,行首尾不得有多余空格。

输入样例:

9
2 6 5 5 -1 5 6 4 7

输出样例:

4
1 9
#include <bits/stdc++.h>
using namespace std;
vector<int> v[100005];       //存储关系
vector<int> p[100005];      //存储每一辈的人
int main()
{
    int n,m,i,j,k=0,a,sum;         //m记录最老辈分的祖宗  len记录辈分
    queue<int> q;

    cin>>n;
    for(i=1;i<=n;i++)
    {
        scanf("%d",&a);
        if(a>0)
            v[a].push_back(i); //i是a的祖宗
        else m=i;
    }//数据结构存储

    q.push(m);
    p[k].push_back(m);    //第一辈
    while(!q.empty())
    {
        sum=q.size();
        k++;
        for(i=0;i<sum;i++)
        {
            a=q.front();
            q.pop();
            for(j=0;j<v[a].size();j++)
            {
                q.push(v[a][j]);
                p[k].push_back(v[a][j]);
            }
        }
    }//BFS

    printf("%d\n",k);
    for(i=0;i<p[k-1].size();i++)
    {
        if(i)
            printf(" ");
        printf("%d",p[k-1][i]);
    }//打印输出
    printf("\n");

    return 0;
}

原文地址:https://www.cnblogs.com/kannyi/p/8735468.html

时间: 2024-08-11 20:01:55

【2018天梯赛】L2-026. 小字辈的相关文章

PTA天梯赛L2

L2-001 紧急救援 题意:就是给你一张n<500的图:让你求最短路径,最短路条数,以及路径: 做法,先用dijkstra求最短路,然后dfs找最短路条数,以及点权的最大值: 一般dfs不就可以解决这个问题吗,像n皇后求次数,注意回溯即可: 那如何dfs确定这条路是最短路径呢?贪心思想,枚举每一个邻居,如果满足   dis[y.v]==dis[x]+y.w 说明当前邻居 通过这个点可以一直是最短路径,这样dfs下去,如果碰到d就return掉: 主要是没有想到用dfs求最短路径条数,然后注意回

天梯赛+蓝桥杯 总结

3月31天梯赛,4.1蓝桥杯.两个比赛接着好近,而且都是第一次参赛,有点小紧张的. 天梯赛个人打的一般般,凉凉了. 蓝桥杯的话就更凉了,感觉比以前的题目难多了. 先说天梯赛吧,比赛时好多人都出现了账号名字与真实姓名不同的情况下,或者登入不进去,还好我的登入成功了.由于这个问题比赛推迟了十分钟,还好没推迟很久. 进去后首先就看了第一题20分的,看了三分钟左右,还没有看懂题意,心理就感觉要凉了,第一题都还没看懂.之后才知道第一题是L1中最难的.... 还好卡了就没有继续钻牛角尖了,直接返回看分值最小

第四届cccc团体程序设计天梯赛

蒟蒻的第一次参加天梯赛,也能也是最后一次参加天梯赛了,下半年打完icpc就要退役了,准备考研复习了 本人的第一次天梯赛,也是本校的第一次天梯赛,由于大家都缺少经验,痛失银奖,只拿了个铜奖回来(刚开始银牌区第二的,比赛结束变成铜牌第二了,哭唧唧),下次打应该会少踩写坑. 这届次的L1-8是“罪魁祸首”,我们几个队友头铁一直去莽这道题(我也花了不少时间),直到主办人员过来说进阶标准降到600分,我才写L2的,然后L2-4用stack写又出bug了,改了半天改不出来,浪费了 几十分钟,最后受不了了,直

PAT 团体程序设计天梯赛-练习集 题解(凑零钱,堆栈,社交集群)

开始准备cccc(cry)天梯赛了,第一周训练题,把官网挂出的训练题刷完了,对pat有了一点点的熟悉感. L1-1  就不说了... L1-2 打印沙漏 一个变量保存空格数,一个变量保存沙漏符号数,打印就行了,但这题话说wrong好几次啊,坑点是沙漏符号后面不打印空格,orz... <span style="font-size:14px;">#include<iostream> #include<stdio.h> #include<math.h

PAT 团体程序设计天梯赛-练习集L1-011. A-B

本题要求你计算A-B.不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A-B. 输入格式: 输入在2行中先后给出字符串A和B.两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束. 输出格式: 在一行中打印出A-B的结果字符串. 输入样例: I love GPLT! It's a fun game! aeiou 输出样例: I lv GPLT! It's fn gm! 1 #inclu

PAT 团体程序设计天梯赛-练习集 L1-015. 跟奥巴马一起画方块

美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形.现在你也跟他一起画吧! 输入格式: 输入在一行中给出正方形边长N(3<=N<=21)和组成正方形边的某种字符C,间隔一个空格. 输出格式: 输出由给定字符C画出的正方形.但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整). 输入样例

PAT 团体程序设计天梯赛-练习集 L1-007. 念数字

输入一个整数,输出每个数字对应的拼音.当整数为负数时,先输出“fu”字.十个数字对应的拼音如下: 0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi 8: ba 9: jiu 输入格式: 输入在一行中给出一个整数,如: 1234 . 提示:整数包括负数.零和正数. 输出格式: 在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格.如 yi er san si. 输入样例: -600 输出样例: fu liu ling

PAT 团体程序设计天梯赛-练习集 L1-005. 考试座位号

每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座.但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码. 输入格式: 输入第一行给出一个正整数N(<=1000),随后N行,每行给出一个考生的信息:“准考证号 试机座位号 考试座位号”.其中准考证号由14位数字组成,座位从1到N编号.输入保证每个

PAT 团体程序设计天梯赛-练习集 L1-016. 查验身份证

一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}:然后将计算的和对11取模得到值Z:最后按照以下关系对应Z值与校验码M的值: Z:0 1 2 3 4 5 6 7 8 9 10M:1 0 X 9 8 7 6 5 4 3 2 现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码. 输入格式: 输入第一行给出正整数N(<= 100