xdoj-1319 求树上任意一点的最大距离----利用树的直径
1 #include <bits/stdc++.h>
using namespace std;
const int N=1e5+;
vector < vector <int> > g(N);
int d1[N],d2[N],d[N];
bool visit[N];
struct node {
int id;
int w;
};
queue <node> q;
int n,m;
void dfs (int rt) {
memset (visit,,sizeof(visit));
while (!q.empty()) q.pop();
node tmp={rt,};
q.push(tmp); visit[tmp.id]=; d[rt]=;
while (!q.empty()) {
tmp=q.front(); q.pop();
for (int i=;i<g[tmp.id].size();i++) {
int _next=g[tmp.id][i];
if (!visit[_next]) {
node k={_next,tmp.w+};
q.push(k); visit[k.id]=; d[_next]=k.w;
}
}
}
return ;
}
int find_max () {
int ans=; int k;
for (int i=;i<=n;i++)
if (d[i]>ans) {
ans=d[i];
k=i;
}
return k;
}
void my_copy (int *a,int *b) {
for (int i=;i<=n;i++)
a[i]=b[i];
}
int main ()
{
int T; scanf ("%d",&T);
while (T--) {
scanf ("%d",&n);
for (int i=;i<=n;i++) g[i].clear();
for (int i=;i<=n-;i++) {
int u,v; scanf ("%d %d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
int x1,x2;
dfs (); x1=find_max();
dfs (x1); x2=find_max();
my_copy (d1,d);
dfs (x2);
my_copy (d2,d);
scanf ("%d",&m);
while (m--) {
int k,p; scanf ("%d %d",&k,&p);
int len=max (d1[k],d2[k]);
if (p<=len) printf("%d\n",p+);
else printf("%d\n",min (n,len+(p-len)/+) );
}
}
return ;
}
感谢金牌果善意的提醒~~~树形dp还是有点麻烦。。
xdoj-1319 求树上任意一点的最大距离----利用树的直径的更多相关文章
- 求树上任意一点所能到达的最远距离 - 树上dp
A school bought the first computer some time ago(so this computer's id is 1). During the recent year ...
- [51nod 1766]树上的最远点对 (树的直径+ST表求lca+线段树)
[51nod 1766]树上的最远点对 (树的直径+ST表求lca+线段树) 题面 给出一棵N个点的树,Q次询问一点编号在区间[l1,r1]内,另一点编号在区间[l2,r2]内的所有点对距离最大值.\ ...
- 【bzoj3362/3363/3364/3365】[Usaco2004 Feb]树上问题杂烩 并查集/树的直径/LCA/树的点分治
题目描述 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤40000)条的不同的垂直或水平的道路连结着农场,道路的长度不超过1000.这些农场的分布就像下面的地图一样, 图中农场用F ...
- LCA最近公共祖先模板(求树上任意两个节点的最短距离 || 求两个点的路进(有且只有唯一的一条))
原理可以参考大神 LCA_Tarjan (离线) TarjanTarjan 算法求 LCA 的时间复杂度为 O(n+q) ,是一种离线算法,要用到并查集.(注:这里的复杂度其实应该不是 O(n+q) ...
- 多校联赛2 Problem2 Warm up 求桥的数目+缩点后的树的直径 当时被不知道原因的爆栈爆到无语了。。
Warm up Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total S ...
- POJ 1985 求树的直径 两边搜OR DP
Cow Marathon Description After hearing about the epidemic of obesity in the USA, Farmer John wants h ...
- Bellman_Ford算法(求一个点到任意一点的最短距离)
单源最短路问题是固定一个起点,求它到任意一点最短路的问题. 记从起点出发到顶点 i 的最短距离为d[i],则有以下等式成立 d[i]=min{d[j]+(从j到 i 的边的权值) 看代码 #inclu ...
- HDU 2376 树形dp|树上任意两点距离和的平均值
原题:http://acm.hdu.edu.cn/showproblem.php?pid=2376 经典问题,求的是树上任意两点和的平均值. 这里我们不能枚举点,这样n^2的复杂度.我们可以枚举每一条 ...
- loj 1257 (求树上每一个点到树上另一个点的最长距离)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1257 思路:首先需要用到一个知识点就是树上任一点到树上最长直径的某一个端点的距离最远, ...
随机推荐
- suffix word al ain aire out ~A1
1◆ al 2◆ ain ~的人 3◆ aire 表名词
- Ubuntu 下matlab 查看memory函数
%Copyright (c) 2012, Michael Hirsch%All rights reserved.%%Redistribution and use in source and binar ...
- ubuntu 挂载虚拟机vdi文件
sudo apt-get install nbd-server nbd-client qemu-kvm # rmmod nbd # modprobe nbd max_part=8 # qemu- ...
- zabbix3.4.7实现企业微信告警,亲测可用!
Zabbix 新版微信告警 Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信 ...
- 【Loadrunner_Http接口】使用Loadrunner对天气信息的接口编写脚本
方法一:使用get请求 Action() { //http接口访问,get请求 web_url("www.abc.com", "URL=http://v.juhe.cn/ ...
- Win10系列:JavaScript获取文件和文件夹列表
在应用程序中有时可能需要获取用户库中的内容,以便执行相关的操作.如果要获取某个用户库中的内容,需要先获取到这个用户库,获得用户库可以通过Windows.Storage命名空间中的KnownFolder ...
- jdk重装后com.sun.tools.javac.Main is not on the classpath的问题 .
在重装了JDk之后,在编译工程的时候出现如下错误: com.sun.tools.javac.Main is not on the classpath.Perhaps JAVA_HOME does no ...
- Python3 线程/进程池 concurrent.futures
python3之concurrent.futures一个多线程多进程的直接对接模块,python3.2有线程池了 Python标准库为我们提供了threading和multiprocessing模块编 ...
- Saiku二次开发获取源代码在本地编译(五)
关于Saiku的二次开发,在本地编译然后启动自己编译好的Saiku服务 Saiku是开源的,从github上能下载源代码,本例中的saiku源码也是从github上找的,然后自己改了一些pom.xml ...
- js onclick函数中传字符串参数的问题
规则: 外变是“”,里面就是‘’外边是‘’,里边就是“” 示例: var a="111"; var html="<a onclick='selecthoods( ...