【洛谷P3884】二叉树问题[JLOI2009]

news/2025/2/11 16:06:20/文章来源:https://www.cnblogs.com/namelessstory/p/18706937

这个主要是二叉树的大杂烩

[JLOI2009] 二叉树问题

题目描述

如下图所示的一棵二叉树的深度、宽度及结点间距离分别为:

  • 深度:\(4\)
  • 宽度:\(4\)
  • 结点 8 和 6 之间的距离:\(8\)
  • 结点 7 和 6 之间的距离:\(3\)

其中宽度表示二叉树上同一层最多的结点个数,节点 \(u, v\) 之间的距离表示从 \(u\)\(v\) 的最短有向路径上向根节点的边数的两倍加上向叶节点的边数。

给定一颗以 1 号结点为根的二叉树,请求出其深度、宽度和两个指定节点 \(x, y\) 之间的距离。

输入格式

第一行是一个整数,表示树的结点个数 \(n\)
接下来 \(n - 1\) 行,每行两个整数 \(u, v\),表示树上存在一条连接 \(u, v\) 的边。
最后一行有两个整数 \(x, y\),表示求 \(x, y\) 之间的距离。

输出格式

输出三行,每行一个整数,依次表示二叉树的深度、宽度和 \(x, y\) 之间的距离。

样例 #1

样例输入 #1

10                                
1 2                            
1 3                            
2 4
2 5
3 6
3 7
5 8
5 9
6 10
8 6

样例输出 #1

4
4
8

提示

对于全部的测试点,保证 \(1 \leq u, v, x, y \leq n \leq 100\),且给出的是一棵树。保证 \(u\)\(v\) 的父结点。

解法&&个人感想

这个题目就是求深度、宽度和距离
深度顾名思义就是用DFS 而宽度在没有用广度优先遍历的情况下(本题数据较小)就可以比较同一深度的节点数
距离固然可以用LCA(最近公共祖先)但是一看数据范围这样 而且是稀疏图 可以用Floyd求最短路(O(\(N^3\)))
我们来介绍一下Floyd 其实就是一个类似DP的操作
也就是松弛操作 d[i][j]=min(d[i][j],d[i][k]+d[k][j])
有点像三角形两边之和大于第三边 但是图论里没这回事
这个有时候在全源最短路径里有奇效
P.S:注意本题对“距离”的定义 以及Floyd要用邻接矩阵存储

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF=1e9;
int d[105][105];
int head[1005],nex[10005],ver[10005];
int siz[105];
int vis[105];
int n,x,y,tot,sx,sy;
int bro[105];
int ans,sum;
void add(int x,int y){ver[++tot]=y;nex[tot]=head[x];head[x]=tot;
}
void dfs(int x){if(vis[x]) return ;vis[x]=1;for(int i=head[x];i;i=nex[i]){int y=ver[i];if(vis[y]==0){siz[y]=siz[x]+1;dfs(y);}}
}
int main(){ scanf("%d",&n);memset(d,0x3f,sizeof(d));for(int i=1;i<=n;i++) d[i][i]=0;for(int i=1;i<=n-1;i++){scanf("%d%d",&x,&y);add(x,y);d[x][y]=1;d[y][x]=2;}scanf("%d%d",&sx,&sy);siz[1]=1;dfs(1);for(int i=1;i<=n;i++){sum=max(sum,siz[i]);}printf("%d\n",sum);for(int i=1;i<=n;i++){bro[siz[i]]++;}for(int i=1;i<=n-1;i++){ans=max(bro[i],ans);}printf("%d\n",ans);for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){d[i][j]=min(d[i][j],d[i][k]+d[k][j]);}}}printf("%d",d[sx][sy]);system("pause");return 0;
}

  

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Whole Web] 前端项目规范 - 1. 项目风格统一

项目风格统一 在前端项目中存在.vscode文件夹,文件夹下一般存在两个文件extensions.json和setting.json。作用是保持所有开发者安装了相同的插件和相同的配置,保持开发环境一致性。extensions.json 在当前项目中,需要安装哪些插件。 {"recommendations": ["V…

告别熬夜写代码!VSCode+Cline扩展插件+DeepSeek-V3大模型,让你的编程水平瞬间超越99.9%的人

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注什么是DeepSeek-V3 DeepSeek是杭州深度求索公司发布的一系列在知识类任务上表现出色的人工智能模型! …

RocketMQ实战—8.营销系统业务和方案介绍

大纲 1.电商核心交易场景的业务流程 2.电商支付后履约场景的业务流程 3.电商营销场景的业务说明 4.电商促销活动的Push推送 5.会员与推送的数据库表结构 6.营销系统的数据库表结构 7.营销系统的基础技术架构 8.XXLJob分布式调度运行原理 9.电商营销系统的工程结构 10.电商营销系…

fluid主题优化

根目录是 C:\blog, 主题目录是 C:\blog\node_modules\hexo-theme-fluid固定背景和设置透明度在根目录下新建一个 scripts 目录,里面添加一个 bg.js 的文件 const {root: siteRoot = "/"} = hexo.config; hexo.extend.injector.register("body_begin", `&l…

Arch、Hyprland实体机全安装教程

安装 内容参考 Arch WiKi Arch 提供了自动化安装脚本可以输入 archinstall 进行配置 下载 Arch 镜像 Arch 2024.12.01 镜像 验证 ISO 文件密钥 SHA256 certutil -hashfile 镜像文件. iso SHA256 # 和官网密钥对比Arch 官网下载界面 密钥在这查看 制作启动盘 进入 Rufus 官网 下…

Zsh Codex:一个革命性的 ZSH 插件

# MacOS 前言 Zsh Codex 是一个革命性的 ZSH 插件,它将人工智能的力量引入了命令行界面。 这个插件能够让你在使用 MacOS 的原生终端时,通过 AI 驱动的代码补全功能,节省大量记忆命令的时间,提高编码效率。 github地址: https://github.com/tom-doerr/zsh_codex本文我们来…

WPS/Office完美集成DeepSeek,提升工作效率的秘密武器!

大家好,今天给大家带来一款超实用的办公神器——DeepSeek!如果你还在为繁琐的文案、翻译、数据分析等任务头疼,那这篇文章绝对不容错过。今天我们要介绍的这款工具——DeepSeek,通过强大的 AI 功能,帮你在 WPS 或 Office 中实现无缝办公,不管是写文案、做策划、翻译校对,…

本地部署 DeepSeek Janus Pro 文生图大模型

Hello, 大家新年好。 在这个春节期间最火的显然是 DeepSeek 了。据不负责统计朋友圈每天给我推送关于 DeepSeek 的文章超过20篇。打开知乎跟B站也全是 DeepSeek 相关的内容。不过大部分的内容都是关于 DeepSeek R1 推理模型有多牛逼。在这里就不多说关于 R1 的废话了,因为大家…

新生赛回顾

签到 文件用Exeinfo PE打开,无壳用ida64位打开F5跳转到C语言界面,可以发现明文rc4 无壳,用ida64打开,发现为rc4加密可以直接用动调拿flag,在输入后面下断点按F9后选择动调方式再按F9进入。输入随便21位字符串,进入后双击Str也就是我们输入的数组,右击选择到Change byte …

CrackMe

[HNCTF 2022 Week1]CrackMe 题目链接:https://www.nssctf.cn/problem/2908 一个用户名对应注册码,应该将用户名输入正确 常规解法断点在strcmp 这道题就是根据这个判断得出flag 用户名为CrackMe,在动调的时候因为会先的到一个假的,在弹出错误信息后在才是正确的 详细原因看…

利用 预加载(PRELOAD)机制实现 Hook

elf程序在进行动态链接的时候,会将有相同符号名的符号覆盖成LD_PRELOAD指定的so文件中的符号。也就是说,我们可以用自己的so库中的函数替换原来库里有的函数,从而达到hook的目的。 下面我们尝试通过这种hook方式来实现任意地址读/写 测试文件: test.c:#include <stdio.h&…

DeepSeek本地部署教程

DeepSeek本地部署教程 deepseek本地部署 第一步:安装ollama https://ollama.com/download第二步:在ollama 官网搜索 https://ollama.com/搜索 deepseek 选择第一项即可模型大小与显卡需求模型版本 参数规模 最低显存要求 推荐 GPU 型号DeepSeek-R1 70B 40GB NVIDIA RTX A6000…