当前位置: 首页 > news >正文

#Z2294. 打印树的直径

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~tttmemset(vis,0,sizeof(vis));dfs_2(t);return 0;
}

相关文章:

  • 【Linux系统学习】3.Linux用户和权限
  • 在容器镜像中为了安全为什么要删除 setuid 和 setgid?
  • jmeter设置关联
  • 汇编笔记 01
  • 【RabbitMQ(一)】:基本介绍 | 配置安装与快速入门
  • python将word文件转换成pdf文件
  • PHPExcel导出excel
  • Python调用pyspark报错整理
  • 在java中一般什么时候用==
  • 打卡今天学习 Linux
  • 美国服务器如何
  • 1 月 Web3 游戏行业概览:市场实现空前增长
  • [项目管理] 如何使用git客户端管理gitee的私有仓库
  • 【CV论文精读】EarlyBird: Early-Fusion for Multi-View Tracking in the Bird’s Eye View
  • LRU缓存
  • 2017前端实习生面试总结
  • git 常用命令
  • Git初体验
  • HTTP请求重发
  • JAVA SE 6 GC调优笔记
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • win10下安装mysql5.7
  • 工作中总结前端开发流程--vue项目
  • 开源SQL-on-Hadoop系统一览
  • 聊一聊前端的监控
  • 入口文件开始,分析Vue源码实现
  • 问题之ssh中Host key verification failed的解决
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • Spring第一个helloWorld
  • 带你开发类似Pokemon Go的AR游戏
  • 如何用纯 CSS 创作一个货车 loader
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (13)Hive调优——动态分区导致的小文件问题
  • (9)STL算法之逆转旋转
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (八十八)VFL语言初步 - 实现布局
  • (万字长文)Spring的核心知识尽揽其中
  • (转)VC++中ondraw在什么时候调用的
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET文档生成工具ADB使用图文教程
  • .php文件都打不开,打不开php文件怎么办
  • @Builder用法
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [2]十道算法题【Java实现】
  • [AIGC 大数据基础]hive浅谈
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [CISCN2019 华北赛区 Day1 Web2]ikun