LOJ10159旅游规划
题目描述
W 市的交通规划出现了重大问题,市政府下定决心在全市各大交通路口安排疏导员来疏导密集的车流。但由于人员不足,W 市市长决定只在最需要安排人员的路口安排人员。
具体来说,W 市的交通网络十分简单,由 n 个交叉路口和 n-1 条街道构成,交叉路口路口编号依次为 0,1,⋯,n−1 。任意一条街道连接两个交叉路口,且任意两个交叉路口间都存在一条路径互相连接。
经过长期调查,结果显示,如果一个交叉路口位于 W 市交通网最长路径上,那么这个路口必定拥挤不堪。所谓最长路径,定义为某条路径 p=(v1,v2,v3,⋯,vk),路径经过的路口各不相同,且城市中不存在长度大于 k 的路径,因此最长路径可能不唯一。因此 W 市市长想知道哪些路口位于城市交通网的最长路径上。
输入格式
第一行一个整数 n;
之后 n-1 行每行两个整数 u,v,表示 u 和 v 的路口间存在着一条街道。
输出格式
输出包括若干行,每行包括一个整数——某个位于最长路径上的路口编号。为了确保解唯一,请将所有最长路径上的路口编号按编号顺序由小到大依次输出。
样例
样例输入
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
数据范围与提示
对于全部数据,1≤n≤2×10^5。
_____________________________________________________________________________________________________________
树形动态规划,典型的求最长链,变化就是加了一个求链上的点。
写的过程中没有注意到点的多次加入,所以错了!
_____________________________________________________________________________________________________________
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=2e5+10;
4 int n;
5 struct edge
6 {
7 int u,v,nxt;
8 }e[maxn<<1];
9 int head[maxn],js;
10 void addage(int u,int v)
11 {
12 e[++js].u=u;e[js].v=v;
13 e[js].nxt=head[u];head[u]=js;
14 }
15 int ml[maxn],sl[maxn];
16 int ans=0;
17 void dp(int u,int fa)
18 {
19 for(int i=head[u];i!=-1;i=e[i].nxt)
20 {
21 int v=e[i].v;
22 if(v!=fa)
23 {
24 dp(v,u);
25 if(ml[v]+1>ml[u])
26 {
27 sl[u]=ml[u];
28 ml[u]=ml[v]+1;
29 }
30 else if(ml[v]+1>sl[u])
31 sl[u]=ml[v]+1;
32 }
33 }
34 if(ml[u]+sl[u]>ans)ans=ml[u]+sl[u];
35 }
36 int q[maxn],jss,bz[maxn];
37 void work(int u,int fa,int len)
38 {
39 if(bz[u]==0)
40 {
41 q[jss++]=u;
42 bz[u]=1;
43 }
44 for(int i=head[u];i!=-1;i=e[i].nxt)
45 {
46 int v=e[i].v;
47 if(v!=fa)
48 {
49 if(ml[v]==len-1)work(v,u,len-1);
50 }
51 }
52 }
53 void dfs(int u,int fa)
54 {
55 if(ml[u]+sl[u]==ans)
56 {
57 if(ml[u]!=sl[u])work(u,fa,ml[u]);
58 work(u,fa,sl[u]);
59 }
60 for(int i=head[u];i!=-1;i=e[i].nxt)
61 {
62 int v=e[i].v;
63 if(v!=fa)dfs(v,u);
64 }
65 }
66 int main()
67 {
68 scanf("%d",&n);
69 memset(head,-1,sizeof(head));
70 for(int u,v,i=1;i<n;++i)
71 {
72 scanf("%d%d",&u,&v);
73 addage(u,v);addage(v,u);
74 }
75 dp(0,-1);
76 dfs(0,-1);
77 sort(q,q+jss);
78 for(int i=0;i<jss;++i)printf("%d\n",q[i]);
79 return 0;
80 }
LOJ10159旅游规划的更多相关文章
- PTA 旅游规划(25 分)
7-10 旅游规划(25 分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条 ...
- pat06-图5. 旅游规划(25)
06-图5. 旅游规划(25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该 ...
- PTA 7-10(图) 旅游规划 最短路问题
7-10(图) 旅游规划 (25 分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果 ...
- ACM程序设计选修课——Problem F:(ds:图)旅游规划(优先队列+SPFA)
问题 F: (ds:图)旅游规划 时间限制: 1 Sec 内存限制: 128 MB 提交: 14 解决: 4 题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路 ...
- PTA 07-图6 旅游规划 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/717 5-9 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路 ...
- VIJOS1476旅游规划[树形DP 树的直径]
描述 W市的交通规划出现了重大问题,市政府下决心在全市的各大交通路口安排交通疏导员来疏导密集的车流.但由于人员不足,W市市长决定只在最需要安排人员的路口安放人员.具体说来,W市的交通网络十分简单,它包 ...
- PAT 07-图6 旅游规划 (25分)
有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...
- PTA 7-9 旅游规划(SPFA)
有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...
- 7-36 旅游规划 (25 分(Dijkstra)
有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...
随机推荐
- select * from 多张表的用法
select * from 多张表的用法 其实就是 inner join select * from Class c,Student s where c.ClassID=s.ClassID ...
- Scanner详解
java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入 1)public static void main(String[] args) { S ...
- 并发编程之JMM&Volatile(一)
并发 很多程序员应该对并发一词并不陌生,并发如同一把双刃剑,如果使用得当,可以帮助我们更好的压榨硬件的性能,反之,也会产生一些难以排查的问题.这里,先简单介绍下并发的几个基本概念. 进程与线程 进程: ...
- Linux下nginx反向代理负载均衡几种方式以及配置
下面以ip地址192.168.1.1 和192.168.1.2举例 1.轮询 (1).轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. upstream ...
- i5 11300H和i5 10300H 的区别
i5-11300H 为 4 核 8 线程,主频 3.1GHz,睿频 4.4GHz,三级缓存 8MB 选 i5-11300H还是i5 10300h 这些点很重要!看完你就知道了https://list. ...
- R语言学习笔记-单一决策树
决策树比较简单明晰,但存在不稳定的风险,数据的微小变化会导致最佳决策树结构的巨大变化,且决策树可能会变得比较复杂. 其算法原理参见https://zhuanlan.zhihu.com/p/148010 ...
- oracle 常用指令(持续更新中....)
1. 查看所有表空间大小 select tablespace_name,sum(bytes)/1024/1024 from dba_data_files group by tablespace_nam ...
- 【Java基础】Java 语言概述
Java 语言概述 主要应用场景 JavaEE.大数据.Android 开发方向. 基础知识概述 编程语言核心结构 变量.基本语法.分支.循环.数组.- Java 面向对象的核心逻辑 OOP.封装.继 ...
- LeetCode117 每个节点的右向指针 II
给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } 填充它的每个 ...
- 来不及解释!Linux常用命令大全,先收藏再说
摘要:Linux常用命令,很适合你的. 一提到操作系统,我们首先想到的就是windows和Linux.Windows以直观的可视化的方式操作,特别适合在桌面端PC上操作执行相应的软件.相比较Windo ...