news 2026/10/3 15:39:22

求树的根【牛客tracker 每日一题】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
求树的根【牛客tracker 每日一题】

求树的根

时间限制:1 秒
空间限制:256M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!


描述

给定一棵包含n nn个节点的有根树,节点编号为1 ∼ n 1 \sim n1∼n。输入以n − 1 n - 1n−1条有向边( a i , b i ) (a_i, b_i)(ai​,bi​)表示:存在一条从a i a_iai​指向b i b_ibi​的边,且整棵树构成一棵树。

请输出:


输入描述


输出描述


示例 1

输入:

3 1 2 1 3

输出:

1 2 3

数据范围与提示

解题思路

本题是有根树基本性质统计的入门题。给定一棵有n nn个节点的有根树,边以有向边( a i , b i ) (a_i, b_i)(ai​,bi​)的形式给出(表示a i a_iai​指向b i b_ibi​),要求找出根节点(入度为0 00的唯一节点)和所有叶子节点(出度为0 00的节点),并按升序输出叶子编号。只需统计每个节点的入度和出度,即可在线性时间内完成。

1. 问题等价转化
2. 算法实现
  1. 输入处理:
    • 读入n nn。若n = 1 n = 1n=1,则只有一个节点,它既是根也是叶子,直接输出1和1。
    • 创建两个数组inDeg和outDeg,大小均为n + 1 n+1n+1,初始化为0 00,分别统计每个节点的入度和出度。
    • 循环读入n − 1 n-1n−1条有向边( x , y ) (x, y)(x,y):
      • inDeg[y]++(y yy的入度加一);
      • outDeg[x]++(x xx的出度加一)。
  2. 寻找根节点:
    • 遍历节点编号1 ∼ n 1 \sim n1∼n,找到第一个inDeg[i] == 0的节点,输出其编号,即为根。
  3. 收集叶子节点:
    • 创建vector<ll> leaves。
    • 再次遍历节点编号1 ∼ n 1 \sim n1∼n,若outDeg[i] == 0,则将i ii加入leaves。
    • 由于遍历顺序是从小到大,leaves中元素天然升序,无需额外排序(代码中sort是冗余但无害的)。
  4. 输出叶子:
    • 按顺序输出leaves中的元素,空格分隔,最后换行。
3. 复杂度分析

总结

利用有根树中根节点入度为0 00、叶子节点出度为0 00的性质,只需一次遍历统计度数,即可快速确定根和所有叶子。注意n = 1 n=1n=1的边界情况需特判。该方法简单高效,是树结构基础操作的典型应用。

代码简要说明

代码内容

#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;voidsolve(){ll n;cin>>n;if(n==1){cout<<"1\n1\n";return;}vector<ll>a(n+1,0);vector<ll>b(n+1,0);for(ll i=1;i<n;i++){ll x,y;cin>>x>>y;a[y]++;b[x]++;}for(ll i=1;i<=n;i++){if(a[i]==0){cout<<i<<'\n';break;}}vector<ll>c;for(ll i=1;i<=n;i++)if(b[i]==0)c.push_back(i);sort(c.begin(),c.end());for(ll i=0;i<=(ll)c.size()-1;i++)cout<<c[i]<<' ';cout<<'\n';}intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);solve();return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 15:35:09

Python商品评论情感分析毕设:从爬虫到GUI完整实现

简介&#xff1a;这份资源是面向计算机相关专业学生与项目实战学习者的毕业设计级商品评论情感分析项目&#xff0c;围绕机器学习方法展开&#xff0c;适合正在准备大作业、毕业设计或需要完整案例练手的人群。项目已通过导师指导与评审&#xff0c;源码经本地编译调试&#xf…

作者头像 李华
网站建设 2026/10/3 15:35:06

基于Spark的信用卡评分卡实战:从数据清洗到WOE分箱与逻辑回归

简介&#xff1a;这份资源是面向大数据与数据分析初学者、高校课程设计参考者的Spark实战项目&#xff0c;以和鲸社区信用卡评分模型构建数据为数据集&#xff0c;用Python结合Spark完成数据预处理、统计分析与可视化&#xff0c;帮助读者理解分布式框架在真实金融风控场景中的…

作者头像 李华
网站建设 2026/10/3 15:34:49

安全大模型适配昇腾认证:一体机如何落地政企本地化部署

安恒的恒脑拿下昇腾技术认证&#xff0c;大模型一体机完成适配——这条消息放在网络安全圈里&#xff0c;乍一看不算什么炸场的大新闻。但你如果正好在帮政企客户推大模型落地项目&#xff0c;或者正头疼"数据不出域"和"算力够不够"这对老矛盾&#xff0c;…

作者头像 李华
网站建设 2026/10/3 15:33:54

多模态感知融合的移动机器人动态路径规划算法与工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/3 15:33:27

SystemVerilog中用constraint实现randc:原理、方案与工程实践

我曾在一个PCIe DMA验证项目里踩过一个特别有意思的坑。拿到一个描述符调度模块的验证任务&#xff0c;要求给32个描述符随机分配优先级&#xff0c;一开始图省事全用rand声明&#xff0c;跑了一晚上回归&#xff0c;第二天一看覆盖率&#xff0c;有一半的描述符从未被分配过。…

作者头像 李华