分析

求出直径和最远距离d

之后我们以直径中点为根

发现父亲的d肯定不小于儿子的d

于是从下往上启发式合并维护与子树根的值相差L内的个数即可

代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define int long long
priority_queue<int>q[];
int n,m,Q,L,d[],rt,ans;
vector<pair<int,int> >v[];
inline void dfs(int x,int fa){
for(int i=;i<v[x].size();i++)if(v[x][i].fi!=fa){
int y=v[x][i].fi,z=v[x][i].se;d[y]=d[x]+z;dfs(y,x);
}
}
inline void dfs2(int x,int fa,int sum){
d[x]=max(d[x],sum);
for(int i=;i<v[x].size();i++)if(v[x][i].fi!=fa){
int y=v[x][i].fi,z=v[x][i].se;dfs2(y,x,sum+z);
}
}
inline void mer(priority_queue<int> &x,priority_queue<int> &y){
if((int)y.size()>(int)x.size())swap(x,y);while(!y.empty())x.push(y.top()),y.pop();
}
inline void go(int x,int fa){
for(int i=;i<v[x].size();i++)if(v[x][i].fi!=fa){
int y=v[x][i].fi,z=v[x][i].se;go(y,x);mer(q[x],q[y]);
while(!q[x].empty())if(q[x].top()-d[x]>L)q[x].pop();else break;
}
ans=max(ans,(int)q[x].size());return;
}
signed main(){
int i,j,k;rt=;
scanf("%lld",&n);
for(i=;i<n;i++){
int x,y,z;
scanf("%lld%lld%lld",&x,&y,&z);
v[x].pb(mp(y,z));
v[y].pb(mp(x,z));
}
dfs(rt,);for(i=;i<=n;i++)if(d[i]>d[rt])rt=i;
memset(d,,sizeof(d));dfs(rt,);int ano=rt;
for(i=;i<=n;i++)if(d[i]>d[ano])ano=i;dfs2(ano,,);
for(i=;i<=n;i++)if(d[i]<d[rt])rt=i;
scanf("%lld",&Q);
while(Q--){
for(i=;i<=n;i++){while(!q[i].empty())q[i].pop();q[i].push(d[i]);}
scanf("%lld",&L);ans=;go(rt,);printf("%lld\n",ans);
}
return ;
}

516D Drazil and Morning Exercise的更多相关文章

  1. Codeforces 516D - Drazil and Morning Exercise(树的直径+并查集)

    Codeforces 题目传送门 & 洛谷题目传送门 这是一道 jxd 的作业题,感觉难度不是特别大(虽然我并没有自己独立 AC,不过也可能是省选结束了我的脑子也没了罢(((,就随便写写罢 u ...

  2. 「CF516D」 Drazil and Morning Exercise

    「CF516D」 Drazil and Morning Exercise 传送门 这个 \(f_i\) 显然可以通过树形 \(\texttt{DP}\) 直接求. 然后看到这种差值问题感觉就可以二分转 ...

  3. 【Cf #292 D】Drazil and Morning Exercise(树的直径,树上差分)

    有一个经典的问题存在于这个子问题里,就是求出每个点到其他点的最远距离. 这个问题和树的直径有很大的关系,因为事实上距离每个点最远的点一定是直径的两个端点.所以我们可以很容易地进行$3$遍$Dfs$就可 ...

  4. CF516D Drazil and Morning Exercise【并查集,结论】

    题目描述:一棵\(n\)个点的树,设\(d(u)=\max_{v\in V}\text{dis}(u,v)\),每次询问一个数\(l\),求一个最大的联通子图\(L\),使得\(\forall u,v ...

  5. CF516D Drazil and Morning Exercise

    cf luogu 首先每个点到最远点的距离可以预处理出来,这个距离显然是这个点到树直径两端点的最大值.把那个距离记为\(d_i\),然后从小到大枚举\(d_i\),并强制它为最大的\(d_i\),那么 ...

  6. 【CF516D】Drazil and Morning Exercise

    题目 首先我们知道,在树上距离一个点最远的点一定是直径的两个端点之一 首先两遍\(\rm dfs\)把直径求出来,定义\(d(u)\)表示点\(u\)距离其最远点的距离,有了直径我们就能求出\(d\) ...

  7. MIT 6.828 JOS学习笔记12 Exercise 1.9

    Lab 1中Exercise 9的解答报告 Exercise 1.9: 判断一下操作系统内核是从哪条指令开始初始化它的堆栈空间的,以及这个堆栈坐落在内存的哪个地方?内核是如何给它的堆栈保留一块内存空间 ...

  8. MIT 6.828 JOS学习笔记13 Exercise 1.10

    Lab 1 Exercise 10 为了能够更好的了解在x86上的C程序调用过程的细节,我们首先找到在obj/kern/kern.asm中test_backtrace子程序的地址, 设置断点,并且探讨 ...

  9. MIT 6.828 JOS学习笔记11 Exercise 1.8

    Exercise 1.8       我们丢弃了一小部分代码---即当我们在printf中指定输出"%o"格式的字符串,即八进制格式的代码.尝试去完成这部分程序. 解答: 在这个练 ...

随机推荐

  1. Codeforces Round #575 (Div. 3) E. Connected Component on a Chessboard(思维,构造)

    E. Connected Component on a Chessboard time limit per test2 seconds memory limit per test256 megabyt ...

  2. openCV for python的使用

    一.openCV简介 OpenCV是一个开源的跨平台计算机视觉库.它轻量级而且高效——由一系列 C 函数和少量C++类构成,同时提供了Python.Ruby.MATLAB等语言的接口,实现了图像处理和 ...

  3. Js中JSON.stringify()与JSON.parse()

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使使JSON称为理想的数据交换语 ...

  4. NJU 操作系统实验三

    实验描述: 代码实现: 链接:https://pan.baidu.com/s/1so3-XsvWBY9ZDbINob6qCw 提取码:8hhe

  5. 【洛谷P2292】L语言

    题目大意:给定一个长度为 N 的字符串和一个字典,字典中所有的字符串的长度均不超过 10,求给定的字符串从前往后最多有多少位可以与字典匹配. 题解:设 \(dp[i]\) 表示串的前 i 位是否能够与 ...

  6. UI控件Telerik UI for Silverlight发布R2 2019|附下载

    Telerik UI for Silverlight包含了超过100个能用于纯Silverlight应用程序中或能作为现有ASP.NET应用程序的一部分的UI控件.通过与我们的WPF控件共享一个相同的 ...

  7. float浮动导致父元素高度坍塌的原因及清除浮动方法

        一.浮动产生原因 一般浮动是什么情况呢?一般是一个盒子里使用了CSS float浮动属性,导致父级对象盒子不能被撑开,这样CSS float浮动就产生了. 本来两个黑色对象盒子是在红色盒子内, ...

  8. 解决jmeter 请求参数中文乱码

    今天在用jmeter 写脚本时发现查看结果树request post请求中文参数值是乱码,故记录下解决过程. 解决过程如下: 1.修改本地配置文件 因为此处的数据,还没有发送出去,所以,肯定是这个变量 ...

  9. PHP基础-表达式介绍

    表达式是 PHP 最重要的基石.在PHP 编程 中,几乎所写的任何东西都是一个表达式.简单但却最精确的定义一个表达式的方式就是“任何有值的东西”. 最基本的表达式形式是常量和变量.当键入“$a = 5 ...

  10. 如何查看运行的docker container 的 执行 docker run的命令

    前言 就是我备份了一下 mysql_container, 然后我想启用 新的备份的mysql_container 但是之前的docker run image xxxxxx这些都已经忘记了 我想找一下之 ...