题意:

 莱克尔和她的朋友到公园玩,公园很大也很漂亮。公园包含n个景点通过n-1条边相连。克莱尔太累了,所以不能去参观所有点景点。

经过深思熟虑,她决定只访问其中的k个景点。她拿出地图发现所有景点的入口都很特殊。所以她想选择一个入口,并找到一条最短的

路来参观k个景点。我们假设景点之间的距离为1。

解题思路:因为地图形状为树形,所以求树的最大直径。当k小于等于直径的时候输出k-1,当k大于直径的时候,因为访问了某一个景

需要返回直径所在的路径上,所以当k大于冷的时候结果为len-(k-len-1)*2。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn = 100005;
vector<int>tree[maxn];
int vis[maxn];
void init(int n){
for( int i = 1; i <= n; i++)tree[i].clear();
}
int len;//保存树的最大直径
int dfs(int u){//求最大树的直径
vis[u] = 1;
int Max = 0,lMax = 0,i,j,size;
size = tree[u].size();
for( int i = 0; i < size; i ++){
if( vis[tree[u][i]])continue;
int tmp = dfs(tree[u][i]);
if( tmp + 1 > Max){
lMax = Max ;
Max = tmp + 1;
}else if( tmp + 1 > lMax)
lMax = tmp + 1;
if( len < Max + lMax)len = Max + lMax;
}
return Max;
}
int main(){
int T,n,m;
int u,v,k;
// freopen("in.txt","r",stdin);
scanf("%d",&T);
while( T-- ){
scanf("%d%d",&n,&m);
init(n);
for( int i = 1; i < n; i++){
scanf("%d%d",&u,&v);
tree[u].push_back(v);
tree[v].push_back(u);
}
len = 0;
memset(vis,0,sizeof(vis));
dfs(1);
// printf("%d\n",len);
while( m-- ){
scanf("%d",&k);
if( k <= len)printf("%d\n",k-1);
else printf("%d\n",len + (k-len-1)*2);
}
}
}

  

最新文章

  1. String源码中的&quot;avoid getfield opcode&quot;
  2. hdfs client access the hdfs cluster not in one domain
  3. Android菜鸟成长记5-ADB和sqllite
  4. asynchronous-logging-with-log4j-2--转
  5. iOS:runtime最全的知识总结
  6. POJ 3468 A Simple Problem with Integers (线段树成段更新)
  7. 基于strpos()函数的判断用户浏览器方法
  8. 从打车软件你能想到多少?盈利模式?商机?大数据?移动互联网蛋糕?生活方式改变withApp?
  9. js操作符
  10. vue使用过滤器利用moment实现日期的格式化
  11. fiddler -- 一个强大的抓包工具
  12. PHP无限分类分类导航LINK的代码实现
  13. 【.Net平台下插件开发】-MEF与MAF初步调研
  14. 转载:UML学习(三)-----序列图(silent)
  15. SimplifyReader项目(转载)
  16. 安卓开发_浅谈WebView(转)
  17. 安装 scrapy 报错 error: Microsoft Visual C++ 14.0 is required
  18. linux: 安装jdk(java)
  19. 一文搞懂Java环境,轻松实现Hello World!
  20. C语言实现strlen函数的几种方法

热门文章

  1. 【JDK】JDK源码分析-Vector
  2. 七分钟理解什么是 KMP 算法
  3. PID算法通俗理解,平衡车,倒立摆,适合不理解PID算法的人来看!
  4. dubbo文档笔记
  5. ansible批量管理服务 下
  6. JAVA基础——Switch条件语句
  7. 【Java例题】7.5 文件题2-学生成绩统计
  8. python basemap readshapefile二三事
  9. 帝国CMS(EmpireCMS) v7.5 代码注入分析(CVE-2018-19462)
  10. Spring Boot 与 Mybatis、Mysql整合使用的例子