HDU4607 Park Visit
肯定会想到树的直径:
如果直径够长,就在直径(1+8)上面找路径,ans=k。
如果不够长,肯定会在有点分叉点(如3,4,5)回溯,然后我们把路径拉直,把其中一条的作为主线(有机化学,ORZ),主线是线走一遍,而分支走两遍,所以要想答案越小,主线就要求越长,也就是树的直径d,ans=d+(k-d)*2。
如果不好想,可以模拟一下,1--2--3--上--下--4--下--下--上--上--5--上--下--下--上-- 6--7--8....
- #include<cstdio>
- #include<iostream>
- #include<cstring>
- #include<algorithm>
- #include<cstdlib>
- #include<vector>
- using namespace std;
- int dis[],ans[],Max;
- int n,s,t;
- vector<int>G[];
- void _dfs(int v)
- {
- for(int i=;i<G[v].size();i++){
- if(!dis[G[v][i]]) {
- dis[G[v][i]]=dis[v]+;
- _dfs(G[v][i]);
- }//任意两个点只有一条路,所以dfs和bfs效果一样
- }
- }
- void _finds()
- {
- memset(dis,,sizeof(dis));
- dis[]=;_dfs();s=;
- for(int i=;i<=n;i++)
- if(dis[i]>dis[s]) s=i;
- }
- void _findt()
- {
- memset(dis,,sizeof(dis));
- dis[s]=;_dfs(s);t=;
- for(int i=;i<=n;i++)
- if(dis[i]>dis[t]) t=i;
- Max=dis[t];
- }
- int main()
- {
- int i,j,k,u,v,T,d,m;
- scanf("%d",&T);
- while(T--){
- scanf("%d%d",&n,&m);
- Max=;
- for(i=;i<=n;i++) G[i].clear();
- for(i=;i<n;i++){
- scanf("%d%d",&u,&v);
- G[u].push_back(v);
- G[v].push_back(u);
- }
- _finds();
- _findt();
- for(i=;i<=m;i++){
- scanf("%d",&d);
- if(d<=Max) printf("%d\n",d-);
- else printf("%d\n",Max-+(d-Max)*);
- }
- }
- return ;
- }
HDU4607 Park Visit的更多相关文章
- hdu4607 Park Visit(树的直径)
Park Visit Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- [HDU4607]Park Visit(树上最长链)
HDU#4607. Park Visit 题目描述 Claire and her little friend, ykwd, are travelling in Shevchenko's Park! T ...
- HDU-4607 Park Visit bfs | DP | dfs
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 首先考虑找一条最长链长度k,如果m<=k+1,那么答案就是m.如果m>k+1,那么最 ...
- HDU4607 - Park Visit(树的直径)
题目大意 给定一颗树,要求走过其中连续的k个点,使得步数最少 题解 每条边要么经过两次,要么一次,因为我们的目标就是使得走一次的边尽量的多,这样就转换成求树的直径了,求树的直径我用的是两次dfs,先随 ...
- HDU 4607 Park Visit (树的最长链)
Park Visit Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Park Visit(树的直径)
传送门 Park Visit Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 题解报告:hdu 4607 Park Visit(最长链)
Problem Description Claire and her little friend, ykwd, are travelling in Shevchenko's Park! The par ...
- hdu 4607 Park Visit 求树的直径
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 题目大意:给你n个点,n-1条边,将图连成一棵生成树,问你从任意点为起点,走k(k<=n) ...
- Park Visit
hdu4607:http://acm.hdu.edu.cn/showproblem.php?pid=4607 题意:给你一棵树,树上每条边的权值是1,然后然你选择m个点,求遍历m个点的最小花费. 题解 ...
随机推荐
- Red Hat Linux相关产品iso镜像下载
Linux系统各发行版镜像下载(持续更新) http://www.linuxfly.org/post/659/ http://www.linuxidc.com/Linux/2007-09/7399.h ...
- Python统计字符串中的中英文字符、数字空格,特殊字符
# -*- coding:utf8 -*- import string from collections import namedtuple def str_count(s): '''找出字符串中的中 ...
- (转)如何让ActiveXObject( "Microsoft.XmlDom ")对象在非IE浏览器下显示数据?firefox(火狐)
如何让ActiveXObject( "Microsoft.XmlDom ")对象在非IE浏览器下显示数据?firefox(火狐) 2013-09-10 16:01 2152人阅读 ...
- http之工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端.HTTP协议采用了请求/响应模型.客户端向服务器发送一个请求报文,请求报文包含请求的方法.URL. ...
- vw 、vh、vmin 、vmax
转自:https://blog.csdn.net/romantic_love/article/details/80868909 vw.vh.vmin.vmax是一种视窗单位,也是相对单位. 它相对的不 ...
- Linux基础入门(实验楼实验)
实验一 Linux系统简介 Linux和windows.Mac OS一样是一种操作系统.最早流行起来的操作系统是UNIX,但由于其过度商业化,价格昂贵,因此在校园里人们大多选择MINIX.1991年, ...
- 使用ShellExecute打开目标文件所在文件夹并选中目标文件
转载:http://blog.csdn.net/chenlycly/article/details/7366364 转载:http://bbs.csdn.net/topics/50440550 She ...
- mysql Alter 的问题
转自:https://blog.csdn.net/c_enhui/article/details/50903351 -- 设置或删除列的默认值.该操作会直接修改.frm文件而不涉及表数据. 此操作很快 ...
- python 字典输出键值对
d = {, , } for dict_key, dict_value in d.items(): print(dict_key,'->',dict_value)
- display:box,按比列划分,水平均分,及垂直等高
一.按比例划分 <div class="test"> <p id="p1">Hello</p> <p id=" ...