L2-026 小字辈(树的建立+BFS)

简介: L2-026 小字辈(树的建立+BFS)

描述:

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

输入:

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

输出:

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


思路:树的建立和BFS

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const ll maxx = 1e18;
const int N = 1e5+100;
const int p = 1e4+10;
const double eps = 1e-8;
struct node{
  vector<int>ve;//放子节点
  int len;//记录层数
}a[N],pp;
int n,k,flag,max1;//flag记录根节点,max1记录最大层数
queue<node>qu;
int b[N],cnt;
int main()
{
  cin>>n;
  for(int i=1;i<=n;i++)
  {
    cin>>k;
    a[k].ve.push_back(i);
    if(k==-1) flag=i;
  }//建树 
  a[flag].len=1;
  qu.push(a[flag]);//把根节点压入队列
  while(!qu.empty())
  {
    pp=qu.front();
    qu.pop();
    if(pp.ve.size()!=0)
    {
      int len=pp.ve.size();
      for(int i=0;i<len;i++)
      {
        a[pp.ve[i]].len=pp.len+1;
        qu.push(a[pp.ve[i]]);
      }
    }
  }//BFS 处理所有成员的层数
  for(int i=1;i<=n;i++)
  {
    max1=max(max1,a[i].len);
  }//找到最大层数
  cout<<max1<<endl;
  for(int i=1;i<=n;i++)
  {
    if(a[i].len==max1)
    {
      b[++cnt]=i;
    }
  }//搜索记录所有最大层数的成员
  for(int i=1;i<=cnt;i++)
  {
    if(i!=cnt) cout<<b[i]<<" ";
    else cout<<b[i];
  }//按照格式输出
}

目录
相关文章
|
6月前
|
机器学习/深度学习 测试技术
【深度优先搜索】【树】【有向图】【推荐】685. 冗余连接 II
【深度优先搜索】【树】【有向图】【推荐】685. 冗余连接 II
|
6月前
|
存储 人工智能 算法
图与树的遍历:探索广度优先、深度优先及其他遍历算法的原理与实现
图与树的遍历:探索广度优先、深度优先及其他遍历算法的原理与实现
403 0
|
5月前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
47 4
|
5月前
|
人工智能 算法 BI
技术心得记录:哈夫曼树及其应用
技术心得记录:哈夫曼树及其应用
49 0
L2-020 功夫传人(树的建立和BFS)
L2-020 功夫传人(树的建立和BFS)
75 0
|
存储 索引
树与图中的dfs和bfs—— AcWing 846. 树的重心 AcWing 847. 图中点的层次
树与图中的dfs和bfs—— AcWing 846. 树的重心 AcWing 847. 图中点的层次
78 0
|
数据安全/隐私保护
列出叶节点 (二叉树的建立和BFS)
列出叶节点 (二叉树的建立和BFS)
92 0
|
存储 机器学习/深度学习 人工智能
邻接矩阵存储图的深度优先遍历(dfs)和广度优先遍历(bfs)
邻接矩阵存储图的深度优先遍历(dfs)和广度优先遍历(bfs)
198 0