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

文章目录

  • 题目描述
  • 思路
  • AC代码
  • 总结

题目描述

在这里插入图片描述
在这里插入图片描述

输入样例1
5
1 2 0
2 4 3
3 0 0
4 0 5
5 0 0
输出样例1
3
4 5

输出样例2
5
2 5 3
1 2 0
3 0 0
4 0 0
5 0 4
输出样例2
3
4 5

思路

dfs + 二叉树

存储结构
1.用结构体数组存储每个节点的父节点、左右节点
2.用vector存储答案

具体做法
1.根据输出,构建家谱
2.遍历每一个点,找出父节点==0的点,该点为祖宗节点
3.从祖宗节点开始dfs
①当辈分 大于 上一次递归辈分时,说明找到了更小辈分的,将res清空,并将当前辈分最小的加入res
②当辈分 等于 上一次递归辈分时,将该节点加入res数组
4.如果该点的左节点存在(子节点),继续遍历,辈分+1
5.如果该点的右节点存在(兄弟节点),继续遍历,辈分不变

AC代码

#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
vector<int> res;
typedef struct
{
    int fa, son, bro;
}person;
person p[N];
int cnt = -1;
void dfs(int x, int step)
{
    if(step > cnt)
    {
        cnt = step;
        res.clear();
        res.push_back(x);
    }
    else if(step == cnt) res.push_back(x);
    if(p[x].son) dfs(p[x].son, step + 1); //搜索子节点,辈分+1
    if(p[x].bro) dfs(p[x].bro, step); //搜索兄弟节点,辈分不变
}
int main()
{
    int n;
    scanf("%d", &n);
    for(int i = 0; i < n; i ++)
    {
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
        if(b)
        {
            p[a].son = b;
            p[b].fa = a;
        }
        if(c)
        {
            p[a].bro = c;
            p[c].fa = a; //这里的意思不是c的父亲是a,只是在树的关系中,c是a的一个节点,这会影响到下面找祖宗节点
        }
    }
    int root;
    for(int i = 1; i <= n; i ++)
    {
        if(!p[i].fa)
        {
            root = i;
            break;
        }
    }
    //printf("%d\n", root);
    dfs(root, 1);
    printf("%d\n", cnt);
    sort(res.begin(), res.end());
    for(int i = 0; i < res.size(); i ++)
    {
        if(i != res.size() - 1) printf("%d ", res[i]);
        else printf("%d\n", res[i]);
    }
    return 0;
}

总结

相较于小字辈,该题多了一步对兄弟节点的遍历

欢迎大家批评指正!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/481871.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[论文笔记] Dual-Channel Span for Aspect Sentiment Triplet Extraction

一种利用句法依赖和词性相关性信息来过滤噪声&#xff08;无关跨度&#xff09;的基于span方法。 会议EMNLP 2023作者Pan Li, Ping Li, Kai Zhang团队Southwest Petroleum University论文地址https://aclanthology.org/2023.emnlp-main.17/代码地址https://github.com/bert-ply…

升级!Sora漫步街头的女人可以跳舞啦!科目三蹦迪多种舞姿停不下来,可精准控制动作

Sora为我们展开了一个充满惊喜的新篇章&#xff0c;同时&#xff0c;Viggle这一模型也吸引了公众的目光&#xff0c;并在推特上迅速走红&#xff01; 想象一个场景&#xff0c;你仅需用几句话就能让画面活灵活现&#xff0c;无论是让角色跳舞、做后空翻&#xff0c;这些曾经只能…

LeetCode刷题【树状数组、并查集、二叉树】

目录 树状数组307. 区域和检索 - 数组可修改406. 根据身高重建队列673. 最长递增子序列的个数1409. 查询带键的排列 并查集128. 最长连续序列130. 被围绕的区域 二叉树94. 二叉树的中序遍历104. 二叉树的最大深度101. 对称二叉树543. 二叉树的直径108. 将有序数组转换为二叉搜索…

算法 之 排序算法

&#x1f389;欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ &#x1f389;感谢各位读者在百忙之中抽出时间来垂阅我的文章&#xff0c;我会尽我所能向的大家分享我的知识和经验&#x1f4d6; &#x1f389;希望我们在一篇篇的文章中能够共同进步&#xff01;&#xff01;&…

CSS(一)

一、CSS 简介 1.1 HTML 的局限性 说起 HTML&#xff0c;这其实是个非常单纯的家伙&#xff0c;他只关注内容的语义。比如 <h1> 表明这是一个大标题&#xff0c;<p> 表明这是一个段落&#xff0c;<img> 表明这儿有一个图片&#xff0c;<a> 表示此处有链…

PCB产业渐出谷底,超颖电子能否找到发展确定性?

经历了三年多低迷期&#xff0c;消费电子在2024年终于以企稳回升的姿态逐步回暖。IDC预期&#xff0c;2024年&#xff0c;智能手机、PC、服务器等关键领域的出货量或迎来修复性成长。 这也将带动“电子产品之母”印刷电路板&#xff08;Printed Circuit Board&#xff0c;PCB&…

Python之装饰器-无参装饰器

Python之装饰器-无参装饰器 装饰器介绍 1. 为何要用装饰器 Python 中的装饰器是一种语法糖&#xff0c;可以在运行时&#xff0c;动态的给函数或类添加功能。装饰器本质上是一个函数&#xff0c;使用 函数名就是可实现绑定给函数的第二个功能 。将一些通用的、特定函数的功…

InstructGPT的流程介绍

1. Step1&#xff1a;SFT&#xff0c;Supervised Fine-Tuning&#xff0c;有监督微调。顾名思义&#xff0c;它是在有监督&#xff08;有标注&#xff09;数据上微调训练得到的。这里的监督数据其实就是输入Prompt&#xff0c;输出相应的回复&#xff0c;只不过这里的回复是人工…

python5:基于多进程的并发编程、基于协程的并发编程的学习笔记

进程 为什么要使用多进程&#xff1f;——GIL的存在&#xff0c;多线程实际不是并发执行 将任务分为两类&#xff1a;IO密集型&#xff08;多线程&#xff09;CPU密集型&#xff08;多进程&#xff09; 多进程的基本用法 concurrent.futures.process.ProcessPoolExecutor#进…

李清照想老公了,人比黄花瘦

年轻时的风光无限&#xff0c;中年时的颠沛流离&#xff0c;晚年时的孤独寂寞&#xff0c;李清照的一生跌宕起伏&#xff0c;十分凄惨。 北宋的国破家亡&#xff0c;让李清照从活泼可爱的少女成为孤独的老妇人。 一、少女情思 少女时期&#xff0c;李清照有一次去游玩&#…

【Linux】误删除/home家目录怎么办? -- 此时ssh连接登录的就是此普通用户

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

Windows系统安装VNC客户端结合内网穿透实现公网远程连接Deepin桌面

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 x11vnc是一种在Linux系统中实现远程桌面控制的工具&#xff0c;它的原理是通过X Window系统的协议来实现远程桌面的展…

AJAX-综合

文章目录 同步代码和异步代码回调函数地狱解决回调函数地狱Promise-链式调用async函数和awaitasync函数和await-捕获错误 事件循环宏任务与微任务Promise.all静态方法 同步代码和异步代码 同步代码&#xff1a;逐步执行&#xff0c;需原地等待结果后&#xff0c;才继续向下执行…

深入探索C语言动态内存分配:释放你的程序潜力

&#x1f308;大家好&#xff01;我是Kevin&#xff0c;蠢蠢大一幼崽&#xff0c;很高兴你们可以来阅读我的博客&#xff01; &#x1f31f;我热衷于分享&#x1f58a;学习经验&#xff0c;&#x1f3eb;多彩生活&#xff0c;精彩足球赛事⚽ &#x1f31f;感谢大家的支持&#…

【Java程序设计】【C00341】基于Springboot的药品管理系统(有论文)

基于Springboot的药品管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 &#x1f345;文末点击卡片获取源码&#x1f345; 开发环境 运行环境&#xff1a;推荐jdk1.8&#xff1b; 开发工具&#xff1a;eclipse以及idea&…

力扣刷题31-33(力扣 0024/0070/0053)

今日题目&#xff1a; 24. 两两交换链表中的节点 题目&#xff1a;给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09; 思路&…

BOM 浏览器对象模型

文章目录 1. BOM 概述2.window 对象的常见事件窗口加载事件调整窗口大小事件 3.定时器setTimeout() 定时器案例&#xff1a;5秒后自动关闭的广告停止 setTimeout() 定时器setInterval() 定时器案例&#xff1a;倒计时停止 setInterval() 定时器案例&#xff1a;发送短信this 4.…

亚马逊云科技:企业如何开启生成式AI之旅?

如果要评选最近两年全球科技行业最热门的细分领域&#xff0c;那么生成式AI绝对会以遥遥领先的票数成为当仁不让的冠军。 然而眼见生成式AI发展得如火如荼&#xff0c;越来越多的企业却陷入了深深的焦虑&#xff1a;应该如何开启生成式AI之旅&#xff1f;又该怎样搭建大模型&am…

MySQL进阶-----Linux系统安装MySQL

目录 前言 一、准备工作 1. 准备一台Linux服务器 2. 下载Linux版MySQL安装包 3. 上传MySQL安装包 二、安装操作指令 1. 创建目录,并解压 2.安装mysql的安装包 三、开启mysql与密码修改 1.启动MySQL服务 2. 查询自动生成的root用户密码 3.修改root用户密码 四、创…