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个点的最小花费. 题解 ...
随机推荐
- JavaScript的基础语法
对于Javascript的而言没有数据类型的全部都是通过var来定义创建的.比如: <!DOCTYPE html> <html> <head> <meta c ...
- #C++初学记录
输入与输出,头文件. #include<iostream> #include<algorithm> using namespace std; int main() { char ...
- 004-notepad++安装。
1.下载地址. 官网:https://notepad-plus-plus.org/ 2.安装.
- python中的切片
python中提供了一种很方便的方法来完成取出指定范围内的元素,这种方法就是切片(Slice). 以下为切片的例子: In [1]: L = ['Michael', 'Sarah', 'Tracy', ...
- Android用PhoneGap封装webapp在android代码中实现连按退出和loadingpage
用PhoneGap封装后的程序有一些瑕疵,比如启动时黑屏,菜单按钮和返回按钮不好控制等. PhoneGap也在github提交的它的源码(版本:2.8): https://github.com/apa ...
- 20145325张梓靖 实验一 "Java开发环境的熟悉"
20145325张梓靖 实验一 "Java开发环境的熟悉" 程序设计过程 实验内容 实现凯撒密码,并进行测试 编写代码 使用java.util.Scanner进行输入,而它的方法里 ...
- OpenDayLight Helium实验三 OpenDaylight二层转发机制实验
本文基于OpenDaylight二层转发机制实验 而成 在SDN网络中,处于末端的主机并不知道其连接的网络是SDN,某台主机要发送数据包到另一台主机,仍然需要进行IP到MAC地址的ARP解析.SDN网 ...
- Gym 101246G Revolutionary Roads
http://codeforces.com/gym/101246/problem/G 题意: 给出一个有向图,现在可以把图中的任意一条边改为无向边,问强连通分量最多可以有多少个点,在此情况下输出所有能 ...
- git 撤销
在add之前撤回文件: git checkout src/com/jay/example/testforgit/MainActivity.java 已经add的,先取消添加,再撤回 git reset ...
- Android反射机制:手把手教你实现反射
什么是反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称 ...