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

旅游规划(树型dp)

 

W 市的交通规划出现了重大问题,市政府下定决心在全市各大交通路口安排疏导员来疏导密集的车流。

但由于人员不足,W 市市长决定只在最需要安排人员的路口安排人员。

具体来说,W 市的交通网络十分简单,由 n 个交叉路口和 n−1 条街道构成,交叉路口路口编号依次为 0,1,…,n−1 。

任意一条街道连接两个交叉路口,且任意两个交叉路口间都存在一条路径互相连接。

经过长期调查,结果显示,如果一个交叉路口位于 W 市交通网最长路径上,那么这个路口必定拥挤不堪。

所谓最长路径,定义为某条路径 p=(v1,v2,…,vk),路径经过的路口各不相同,且城市中不存在长度大于 k 的路径(因此最长路径可能不唯一)。

因此 W 市市长想知道哪些路口位于城市交通网的最长路径上。

输入格式

第一行包含一个整数 n

之后 n−1行每行两个整数 u,v,表示编号为 u和 v 的路口间存在着一条街道。

输出格式

输出包括若干行,每行包括一个整数——某个位于最长路径上的路口编号。

为了确保解唯一,请将所有最长路径上的路口编号按编号顺序由小到大依次输出。

数据范围

1≤n≤2×105

输入样例:

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

输出样例:

0
1
2
3
4
5
6
8
9

两次dfs第一次求树的直径和当前点向下的最大值和次大值,第二次求当前点向上的最大值 

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
constexpr int N=1e6+7;
int n,d1[N],d2[N],p[N],up[N];
int h[N],e[N],ne[N],idx;
int maxd;
void add(int a,int b){e[idx]=b;ne[idx]=h[a];h[a]=idx++;
}
void dfs_d(int u,int f){for(int i=h[u];i!=-1;i=ne[i]) {int j = e[i];if (j != f) {dfs_d(j, u);int dis = d1[j] + 1;if (dis > d1[u]) {d2[u] = d1[u], d1[u] = dis;p[u] = j;} else if (dis > d2[u]) {d2[u] = dis;}}}maxd= max(maxd,d1[u]+d2[u]);
}
void dfs_u(int u,int f){for(int i=h[u];i!=-1;i=ne[i]) {int j = e[i];if (j != f) {up[j]=up[u]+1;if(p[u]==j) up[j]= max(up[j],d2[u]+1);else up[j]= max(up[j],d1[u]+1);dfs_u(j,u);}}
}
int main(){memset(h,-1,sizeof h);scanf("%d",&n);for(int i=1;i<n;i++){int a,b;scanf("%d%d",&a,&b);add(a,b),add(b,a);}dfs_d(0,-1);dfs_u(0,-1);for (int i = 0; i < n; i++){int a[3] = {up[i], d1[i], d2[i]};sort(a, a + 3);if (a[1] + a[2] == maxd){printf("%d\n",i);}}return 0;
}

 

http://www.lryc.cn/news/20966.html

相关文章:

  • 【C++】string类的模拟实现
  • 笔记(一)——STL容器
  • 红黑树
  • RIP路由协议的更新(电子科技大学TCP/IP第二次实验)
  • 基于JWT实现用户身份认证
  • SaltStack 远程命令执行漏洞(CVE-2020-16846)
  • SAP 详细解析成本收集器
  • Vision Transformer学习了什么-WHAT DO VISION TRANSFORMERS LEARN? A VISUAL EXPLORATION
  • 一种全新的图像滤波理论的实验(三)
  • CV——day79 读论文:基于小目标检测的扩展特征金字塔网络
  • 智能家居项目(五)测试串口功能
  • 2023年全国最新道路运输从业人员精选真题及答案7
  • python的所有知识点(含讲解),不看就亏死了
  • 【Servlet篇】Response对象详细解读
  • SAP FICO期初开账存货导入尾差
  • 微信商城小程序怎么做_分享实体店做微信商城小程序制作步骤
  • 【moment.js】时间格式化插件
  • 微信小程序开发【壹】
  • 2 k-近邻算法
  • 深入探究文件I/O
  • 【LeetCode】剑指 Offer(9)
  • python 遍历可迭代对象的方法
  • 【数据库】 第11章 并发控制
  • Python3-数字
  • (四十一)Read Committed隔离级别是如何基于ReadView机制实现的?
  • React echarts封装
  • 【C语言进阶】了解计算机的程序环境和预处理过程 掌握计算机预处理操作
  • (三十六)大白话数据库幻读,本质到底是个什么问题?
  • 【算法经典题集】递归(持续更新~~~)
  • 多区域的OSPF实战配置