#Z2294. 打印树的直径

news2024/11/18 8:37:15

Description

给你一棵树,树上有N个点,编号从0到N-1

请找出任意一条树的直径,并输出直径上的点,输出顺序为从直径的某个端点走向另一个端点

Format

Input

第一行一个整数 n;

之后 n-1 行每行两个整数 u,v,表示 u 和 v 之间有边。

1<=N<=2e5

Output

如题

Samples

输入数据 1

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

Copy

输出数据 1

3 1 0 2 5

思路

是树的直径的加难板,不会的可以看看求树的直径(史上最详细,匠心之作)_树的直径存在负边权-CSDN博客 

我们可以在求完树的直径的两个端点后再做一次dfs并用栈储存路径即可,详解代码。


代码

#include<bits/stdc++.h>
using namespace std;
vector<int>vec[1000001];
bool vis[10000001];
int ans,dep[1000001],n,x,y,len,t,tt,ttt,a[1000001],as;
stack<int> st;
void dfs(int nd,int deep)
{
  dep[nd] = deep;
  vis[nd] = 1;
  for(int i = 0;i < vec[nd].size();i++)
  {
    int son = vec[nd][i];
    if(vis[son] == 0)
    {
      dfs(son,deep + 1);
      
    }
  }
}
void dfs_2(int nd)
{
  vis[nd] = 1;
  st.push(nd);
  if(nd == ttt)
  {
    while(st.size())
    {
      a[++as] = st.top();
      st.pop();
    }
    for(int i = 1;i <= as;i++) cout<<a[i]<<' ';
    exit(0);
  }
  for(int i = 0;i < vec[nd].size();i++)
  {
    int son = vec[nd][i];
    if(vis[son] == 0) dfs_2(son);
  }
  st.pop();
}
signed main()
{
	cin>>n;
	for(int i = 1;i < n;i++)
	{
		cin>>x>>y;
		vec[x].push_back(y);
		vec[y].push_back(x);
	}
	dfs(0,1);
  for(int i = 0;i < n;i++)
    if(tt < dep[i])
    {
      tt = dep[i];
      t = i;
    }
  memset(vis,0,sizeof(vis));
  memset(dep,0,sizeof(dep));
  tt = 0;
  dfs(t,0);
  for(int i = 0;i < n;i++)
  {
    if(tt < dep[i])
    {
      tt = dep[i];
      ttt = i;
    }
  }
  //t~ttt
  memset(vis,0,sizeof(vis));
  dfs_2(t);
  return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EMNLP 2023精选:Text-to-SQL任务的前沿进展(下篇)——Findings论文解读

导语 本文记录了今年的自然语言处理国际顶级会议EMNLP 2023中接收的所有与Text-to-SQL相关&#xff08;通过搜索标题关键词查找得到&#xff0c;可能不全&#xff09;的论文&#xff0c;共计12篇&#xff0c;包含5篇正会论文和7篇Findings论文&#xff0c;以下是对这些论文的略…

Vue代理模式和Nginx反向代理(Vue代理部署不生效)

在使用axios时&#xff0c;经常会遇到跨域问题。为了解决跨域问题&#xff0c;可以在 vue.config.js 文件中配置代理&#xff1a; const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,devServer: {port: 7070,prox…

Linux设备树实现方式

设备树是用来管理板级设备的&#xff0c;就是用来描述开发板上CPU,内存&#xff0c;外设等信息的文件。 举个例子&#xff0c;某款芯片很火&#xff0c;很多厂商都选择该芯片来制作自己的开发板&#xff0c;这些开发板上的外设资源数目不一致&#xff0c;有可能用到相同外设但确…

代码随想录第28天|● 93.复原IP地址 ● 78.子集 ● 90.子集II

文章目录 93.复原IP地址思路&#xff1a;切割问题代码&#xff1a; 78.子集思路-找所有节点coding: 90.子集II思路-去重 93.复原IP地址 思路&#xff1a;切割问题 代码&#xff1a; 使用stringBuilder&#xff0c;故优化时间、空间复杂度&#xff0c;因为向字符串插入字符时无…

C++入门篇(3)auto关键字、内联函数、nullptr关键字

目录 1.auto关键字&#xff08;C11&#xff09; 1.1 typedef取别名的缺陷 1.2 auto 1.3 auto使用细则 1.3.1 auto与指针引用结合使用 1.3.2 同一行定义多个变量 1.4 auto不能推导的场景 1.4.1 auto不能作为函数的形参 1.4.2 auto不能直接用来声明数组 2. 内联函数 2…

net start mysql服务名无效|发生系统错误 解决办法

未输入正确的mysql服务名 解决办法&#xff1a; 使用net start命令查看可用的服务名&#xff0c;找到mysql的服务名 未使用管理员身份运行命令提示符 解决方法&#xff1a; 使用管理员身份运行命令提示符

【Yi-VL-34B】(5):使用3个3090显卡24G版本,运行Yi-VL-34B模型,支持命令行和web界面方式,理解图片的内容转换成文字

1&#xff0c;视频地址 https://www.bilibili.com/video/BV1BB421z7oA/ 2&#xff0c;关于Yi-VL-34B https://www.modelscope.cn/models/01ai/Yi-VL-34B/summary 易视觉语言&#xff08;Yi-VL&#xff09;模型是易大型语言模型&#xff08;LLM&#xff09;系列的开源多模态…

人工智能|深度学习——使用多层级注意力机制和keras实现问题分类

代码下载 使用多层级注意力机制和keras实现问题分类资源-CSDN文库 1 准备工作 1.1 什么是词向量? ”词向量”&#xff08;词嵌入&#xff09;是将一类将词的语义映射到向量空间中去的自然语言处理技术。即将一个词用特定的向量来表示&#xff0c;向量之间的距离&#xff08;例…

【buuctf--九连环】

这题主要是记录一下新的隐写工具 steghide 用binwalk 看一下 jpg 图片,还是有不少东西&#xff0c;那么-e 提取一下实际上通过binwalk 提取就避免了伪加密的问题&#xff0c;详见BUUCTF-九连环_九连环 buuctf-CSDN博客 其中 qwe.zip为真加密&#xff0c;需要找出密码&#xff…

计算机设计大赛 深度学习+opencv+python实现车道线检测 - 自动驾驶

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV56 数据集处理7 模型训练8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &am…

龙芯安装Nodejs

由于龙芯3A5000/6000使用的是LoongArch指令集&#xff0c;然而Nodejs只支持X64和ARM指令集&#xff0c;无法使用常规的安装方法&#xff0c;虽然官方提供了源码&#xff0c;能在电脑上自行编译执行&#xff0c;但本人尝试后显示编译失败&#xff0c;在网络上查找解决方法得知还…

RBAC权限控制实现方案

上一文章讲述了利用RBAC实现访问控制的思路&#xff08;RBAC实现思路&#xff09;&#xff0c;本文主要详细讲解利用vuex实现RBAC权限控制。 一、准备工作 从后台获取到权限对照表&#xff0c;如下&#xff1a; 1、添加/编辑楼宇 park:building:add_edit 2、楼宇管理 pa…

MySQL数据引擎、建库及账号管理

目录 一、MySQL数据库引擎 1.1.MySQL常见数据库引擎 1.InnoDB(MySQL默认引擎) 2.MyISAM 3.MEMORY&#xff08;Heap&#xff09; 1.2.存储引擎查看 二、建库 1.默认数据库介绍 2.建库 3.查看数据库 4.删除数据库 三、账号管理 1.创建用户 1.创建用户并设置登陆密码…

【电路笔记】-互感

互感 文章目录 互感1、概述2、互感3、耦合系数4、互感示例15、互感示例2 互感是一个线圈磁场与另一个线圈的相互作用&#xff0c;因为它在相邻线圈中感应出电压。 1、概述 互感是两个磁耦合线圈之间的电路参数&#xff0c;定义了一个线圈产生的时变磁通量被感应到相邻的第二个…

python coding with ChatGPT 打卡第17天| 二叉树:找树左下角的值、路径总和

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

Cpp-2

类与对象 /*类与对象&#xff1a;1.类是一种用户自定义的数据类型&#xff08;函数&#xff0c;数据&#xff09;2.类是具有相同的属性和行为的对象的集合3.类是对象的抽象&#xff0c;对象是类的具体4.对象&#xff1a;通过使用类类型定义的变量 */定义类 /*如何定义类&…

LabVIEW汽车自燃监测预警系统

LabVIEW汽车自燃监测预警系统 随着汽车行业的飞速发展&#xff0c;汽车安全问题日益受到公众的关注。其中&#xff0c;汽车自燃现象因其突发性和破坏性&#xff0c;成为一个不可忽视的安全隐患。为了有效预防和减少自燃事故的发生&#xff0c;提出了LabVIEW的汽车自燃监测预警…

ES节点故障的容错方案

ES节点故障的容错方案 1. es启动加载逻辑1.1 segment和translg组成和分析1.2 es节点启动流程1.3 es集群的初始化和启动过程 2. master高可用2.1 选主逻辑2.1.1 过滤选主的节点列表2.1.2 Bully算法2.1.2 类Raft协议2.1.3 元数据合并 2.2 HA切换 3. 分片高可用3.1 集群分片汇报3.…

前端常用代码整理(不断更新中)— js,jquery篇

1.随机函数代码 function getRandom(min, max) {return Math.floor(Math.random() * (max - min 1)) min}2.倒计时代码 let now new Date()// 2. 得到指定时间的时间戳let last new Date(这里写想要达到的时间)// 3. &#xff08;计算剩余的毫秒数&#xff09; / 1000 剩余…

ChinaXiv:中科院科技论文预发布平台

文章目录 Main彩蛋 Main 主页&#xff1a;https://chinaxiv.org/home.htm 彩蛋