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 思路:首先需要用到一个知识点就是树上任一点到树上最长直径的某一个端点的距离最远, ...
随机推荐
- Weblogic项目部署教程
说明: 其实Weblogic是允许直接以文件夹形式发布项目的,WAR包和文件夹发部的效果没有什么区别. 对于Eclipse项目,导出的WAR包其实确实只是项目下的WebContent文件夹中的内容,所 ...
- [转]perftools查看堆外内存并解决hbase内存溢出
最近线上运行的hbase发现分配了16g内存,但是实际使用了22g,堆外内存达到6g.感觉非常诡异.堆外内存用一般的工具很难查看,可以通过google-perftools来跟踪: http://cod ...
- CentOS下安装mysql5.7和mysql8.x
5.7和8.15版本亲测.centos版本为:CentOS-7-x86_64-Minimal-1810. 1.下载mysql57-community-release-el7-9.noarch.rpm. ...
- Unity中UGUI之Canvas属性解读版本二
Canvas Render Modes(渲染模式) 1.在screen空间中渲染2.在world空间中渲染 Screen Space-Overlay 在这个渲染模式中,UI元素将在场景的上面.如果场景 ...
- el表达式原样输出,不被解析
今天遇到了,在jar包都有的前提下EL表达式原样输出,不被解析,原因是: page指令中确少 isELIgnored="false" 加上就好了 <%@ page langu ...
- PC/FORTH定点原理
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- 经典面试题sql基础篇-50常用的sql语句(有部分错误)
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...
- 深入理解java虚拟机---lanmbda表达式简介(三)
1.lanmbda表达式使用 lanbmda表达式的作用: A: 取代内部类 B;增加对集合的操作,从而增强其性能
- 3.6 C++继承机制下的构造函数
参考:http://www.weixueyuan.net/view/6363.html 总结: 在codingbook类中新增了一个language成员变量,为此必须重新设计新的构造函数.在本例中bo ...
- MPX
Pre-processing: MPX使用的滤波器是自适应性的‘Wiener’ filter.有时甚至不用MPX,因为尽管Wiener 所引起的扰乱是可以忽略的,有时发现滤波并不能很好地提高拾取的精度 ...