肯定会想到树的直径

如果直径够长,就在直径(1+8)上面找路径,ans=k

如果不够长,肯定会在有点分叉点(如3,4,5)回溯,然后我们把路径拉直,把其中一条的作为主线(有机化学,ORZ),主线是线走一遍,而分支走两遍,所以要想答案越小,主线就要求越长,也就是树的直径d,ans=d+(k-d)*2

如果不好想,可以模拟一下,1--2--3--上--下--4--下--下--上--上--5--上--下--下--上-- 6--7--8....

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<cstdlib>
  6. #include<vector>
  7. using namespace std;
  8. int dis[],ans[],Max;
  9. int n,s,t;
  10. vector<int>G[];
  11. void _dfs(int v)
  12. {
  13. for(int i=;i<G[v].size();i++){
  14. if(!dis[G[v][i]]) {
  15. dis[G[v][i]]=dis[v]+;
  16. _dfs(G[v][i]);
  17. }//任意两个点只有一条路,所以dfs和bfs效果一样
  18. }
  19. }
  20. void _finds()
  21. {
  22. memset(dis,,sizeof(dis));
  23. dis[]=;_dfs();s=;
  24. for(int i=;i<=n;i++)
  25. if(dis[i]>dis[s]) s=i;
  26. }
  27. void _findt()
  28. {
  29. memset(dis,,sizeof(dis));
  30. dis[s]=;_dfs(s);t=;
  31. for(int i=;i<=n;i++)
  32. if(dis[i]>dis[t]) t=i;
  33. Max=dis[t];
  34. }
  35. int main()
  36. {
  37. int i,j,k,u,v,T,d,m;
  38. scanf("%d",&T);
  39. while(T--){
  40. scanf("%d%d",&n,&m);
  41. Max=;
  42. for(i=;i<=n;i++) G[i].clear();
  43. for(i=;i<n;i++){
  44. scanf("%d%d",&u,&v);
  45. G[u].push_back(v);
  46. G[v].push_back(u);
  47. }
  48. _finds();
  49. _findt();
  50. for(i=;i<=m;i++){
  51. scanf("%d",&d);
  52. if(d<=Max) printf("%d\n",d-);
  53. else printf("%d\n",Max-+(d-Max)*);
  54. }
  55. }
  56. return ;
  57. }

HDU4607 Park Visit的更多相关文章

  1. hdu4607 Park Visit(树的直径)

    Park Visit Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. [HDU4607]Park Visit(树上最长链)

    HDU#4607. Park Visit 题目描述 Claire and her little friend, ykwd, are travelling in Shevchenko's Park! T ...

  3. HDU-4607 Park Visit bfs | DP | dfs

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 首先考虑找一条最长链长度k,如果m<=k+1,那么答案就是m.如果m>k+1,那么最 ...

  4. HDU4607 - Park Visit(树的直径)

    题目大意 给定一颗树,要求走过其中连续的k个点,使得步数最少 题解 每条边要么经过两次,要么一次,因为我们的目标就是使得走一次的边尽量的多,这样就转换成求树的直径了,求树的直径我用的是两次dfs,先随 ...

  5. HDU 4607 Park Visit (树的最长链)

    Park Visit Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. Park Visit(树的直径)

    传送门 Park Visit Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  7. 题解报告:hdu 4607 Park Visit(最长链)

    Problem Description Claire and her little friend, ykwd, are travelling in Shevchenko's Park! The par ...

  8. hdu 4607 Park Visit 求树的直径

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 题目大意:给你n个点,n-1条边,将图连成一棵生成树,问你从任意点为起点,走k(k<=n) ...

  9. Park Visit

    hdu4607:http://acm.hdu.edu.cn/showproblem.php?pid=4607 题意:给你一棵树,树上每条边的权值是1,然后然你选择m个点,求遍历m个点的最小花费. 题解 ...

随机推荐

  1. Red Hat Linux相关产品iso镜像下载

    Linux系统各发行版镜像下载(持续更新) http://www.linuxfly.org/post/659/ http://www.linuxidc.com/Linux/2007-09/7399.h ...

  2. Python统计字符串中的中英文字符、数字空格,特殊字符

    # -*- coding:utf8 -*- import string from collections import namedtuple def str_count(s): '''找出字符串中的中 ...

  3. (转)如何让ActiveXObject( "Microsoft.XmlDom ")对象在非IE浏览器下显示数据?firefox(火狐)

    如何让ActiveXObject( "Microsoft.XmlDom ")对象在非IE浏览器下显示数据?firefox(火狐) 2013-09-10 16:01 2152人阅读 ...

  4. http之工作原理

    HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端.HTTP协议采用了请求/响应模型.客户端向服务器发送一个请求报文,请求报文包含请求的方法.URL. ...

  5. vw 、vh、vmin 、vmax

    转自:https://blog.csdn.net/romantic_love/article/details/80868909 vw.vh.vmin.vmax是一种视窗单位,也是相对单位. 它相对的不 ...

  6. Linux基础入门(实验楼实验)

    实验一 Linux系统简介 Linux和windows.Mac OS一样是一种操作系统.最早流行起来的操作系统是UNIX,但由于其过度商业化,价格昂贵,因此在校园里人们大多选择MINIX.1991年, ...

  7. 使用ShellExecute打开目标文件所在文件夹并选中目标文件

    转载:http://blog.csdn.net/chenlycly/article/details/7366364 转载:http://bbs.csdn.net/topics/50440550 She ...

  8. mysql Alter 的问题

    转自:https://blog.csdn.net/c_enhui/article/details/50903351 -- 设置或删除列的默认值.该操作会直接修改.frm文件而不涉及表数据. 此操作很快 ...

  9. python 字典输出键值对

    d = {, , } for dict_key, dict_value in d.items(): print(dict_key,'->',dict_value)

  10. display:box,按比列划分,水平均分,及垂直等高

    一.按比例划分 <div class="test"> <p id="p1">Hello</p> <p id=" ...