输入格式:

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

输出格式:

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

输入样例:

9
2 6 5 5 -1 5 6 4 7

输出样例:

4
1 9

DFS

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
vector<int> v[N];
bool st[N];
int n,h;//h为最大深度
vector<int> res;void dfs(int u,int height)
{if (height>h){h=height;res.clear();}if (height == h) res.push_back(u);for (auto x : v[u])dfs(x, height + 1);
}
int main()
{cin >> n;for (int i = 1;i <= n;i++){  int t;cin >> t;if (t == -1) t = 0;//-1不可以作为下标,这里不妨改成0v[t].push_back(i);}dfs(0,1);//祖宗开始 高度为1cout << h-1 << endl;for(int i=0;i<res.size()-1;i++)cout<<res[i]<<" ";cout<<res[res.size()-1];
}

并查集

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int h[N], a[N];//h[x]辈分
int n;//存最大深度int  find(int x)
{if (a[x] == -1) h[x] = 1;if (h[x] == 0) h[x] = find(a[x]) + 1;//这个h[x]==0防止过多的去迭代return h[x];
}int main()
{cin >> n;for (int i = 1;i <= n;i++)cin >> a[i];for (int i = 1;i <= n;i++) find(i);int hmax = 0;for (int i = 1;i <= n;i++)hmax = max(hmax, h[i]);cout<<hmax<<endl;int flag = 0;for (int i = 1;i <= n;i++){if (h[i] == hmax){if (!flag){cout << i;flag = 1;}else cout << " " << i;}}}

BFS

宽搜时,遍历子节点,子节点的辈分等于其父节点+1

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
vector<int> v[N];
int a[N];
int n;int main()
{cin >> n;int root;for (int i = 1;i <= n;i++){int t;cin >> t;if (t == -1) root=i;else v[t].push_back(i);}queue<int> q;q.push(root);a[root] = 1;while (q.size()){int t = q.front();q.pop();for (auto x : v[t]){a[x] = a[t] + 1;q.push(x);}}int hmax = 0;for (int i = 1;i <= n;i++){hmax = max(hmax, a[i]);}cout << hmax << endl;int flag = 0;for (int i = 1;i <= n;i++){if (a[i] == hmax){if (!flag){cout << i;flag++;}else cout << " " << i;}}
}

L2-026 小字辈——BFS DFS 并查集-三种方法相关推荐

  1. HDU-3974 Assign the task 线段树 或 直接模拟多叉树 或 并查集 (三种方法)

    题目大意 t 组数据(t<=10),每组第一行一个 n 表示 n 个员工(n<=5e4),接下来 n-1 行,每行两个整数 u,v 表示 v 是 u 的上司 然后一行 m 表示有 m 个操 ...

  2. hdu1181变形课dfs/bfs/并查集三种解法(java)

    题目链接 Problem Description 呃-变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...

  3. LeetCode 1319. 连通网络的操作次数(BFS/DFS/并查集)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 2.3 并查集 1. 题目 用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1. 线缆用 connection ...

  4. hdu dfs入门java_hdu1181变形课dfs/bfs/并查集三种解法(java)

    题目链接 Problem Description 呃-变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...

  5. 并查集三种Java代码实现

    @代码模板 package Algorithm;public class UF {private int[] id;//连通分量的idprivate int count;public UF(int n ...

  6. LeetCode 886. 可能的二分法(着色DFS/BFS/拓展并查集)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 2.3 并查集 1. 题目 给定一组 N 人(编号为 1, 2, -, N), 我们想把每个人分进任意大小的两组. 每个人都可能不喜欢 ...

  7. 小花梨判连通(DFS或BFS或并查集+vector+map)——“美登杯”上海市高校大学生程序设计邀请赛 (华东理工大学)

    (https://acm.ecnu.edu.cn/contest/173/problem/C/) 题目大意: 小花梨给出?个点,让?位同学对这?个点任意添加无向边,构成?张图.小花梨想知道对于每个点? ...

  8. LeetCode547. Friends Circles 利用union find | bfs | dfs三种方法解决

    问题来源 此题来源于LeetCode547. Friend Circles,主要运用了并查集(union find).广度优先遍历(bfs)和深度优先遍历(bfs)三种方法解决. 问题简述 给定一个N ...

  9. 广度优先搜索(BFS)最短路径输出表示(三种方法)

    相信我,看完之后,你会对BFS有种全新的了解,彻底掌握BFS 只需要这一篇就足够啦,狗头 BFS路径表示 广度优先搜索顾名思义就是以迷宫里的无向图某一个点,借助队列,一层一层以该点为中心散开进行搜索, ...

最新文章

  1. 中介分析 相对直接效应 相对简介效应_中介效应分析方法和流程
  2. poi xwpf 转换成 html,Apache POI创建的docx文档无法转化成html
  3. scratch desktop的基本使用 - 舞台坐标系
  4. 使用线程,防止当前程序被阻塞
  5. 【博客大赛】使用LM2677制作的3V至24V数控可调恒压源
  6. 从ISO 文件制作U盘启动盘.
  7. APUE C内存空间详解图
  8. 深度理解 RGMII (包含Linux和realtek)
  9. pid双闭环matlab仿真,SPWM波控制单相逆变器双闭环PID调节器的Simulink建模与仿真
  10. 皮克定理和任意多边形的面积公式
  11. 如何通俗的解释全微分?
  12. Windows蓝屏自动修复无法修复你的电脑
  13. Android解析域名获取IP
  14. scrapy框架爬取斗鱼女主播照片,依据颜值排行榜
  15. Tomcat 在IE中下载rar文件直接以乱码方式打开解决方案
  16. 会员等级进度功能前端实现
  17. 远程控制计算机控制不,远程控制电脑为什么打不了字
  18. 三菱FX系列DPLSY指令使用
  19. 线程wait、join用法
  20. 苏州事业单位专技岗面试经历

热门文章

  1. Linux基础——之一命令
  2. 一种刷下行流量的方式 [爱快 docker版]
  3. Linux写文件断电保存,linux 写文件操作,异常掉电后,文件损坏丢失(0kb)
  4. win10和android手机日历事件的同步(华为手机)
  5. 亿信华辰:能源行业数字化转型的目标是利用数据实现敏捷能源
  6. PHP自学笔记 ---李炎恢老师PHP第一季 TestGuest0.7
  7. 《从零开始学PHP》 何俊斌
  8. android设置字体为微软雅黑,css如何设置字体为微软雅黑
  9. 浏览器打印,Chrome网页打印中的宽度控制
  10. Linux系统克隆和快照