CF516D Drazil and Morning Exercise
首先每个点到最远点的距离可以预处理出来,这个距离显然是这个点到树直径两端点的最大值.把那个距离记为\(d_i\),然后从小到大枚举\(d_i\),并强制它为最大的\(d_i\),那么前面\(d_j\)更小的,满足\(d_i-d_j\le L\)的点都可以被计入答案,那么就可以维护一些点的连通情况,支持加点删点,以及维护每个连通块大小,lct即可
考虑发掘其他性质,因为一个点的最远点一定是直径两端点之一,那么把直径上中点作为根,在直径一半边的所有点的最远点都是另一侧的直径端点,并且越往子树走,这个距离会越大.所以如果从大到小枚举最小的\(d_i\),那么当一个满足\(d_j-d_i>L\)的点\(j\)被删掉时,在它子树内的点会被先删掉,所以删它的时候他就是个叶子.那么考虑直接并查集维护,删点是直接给对应并查集大小\(-1\)即可
#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define db double
using namespace std;
const int N=1e5+10;
LL rd()
{
LL x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int to[N<<1],nt[N<<1],w[N<<1],hd[N],tot=1;
void add(int x,int y,int z)
{
++tot,to[tot]=y,nt[tot]=hd[x],w[tot]=z,hd[x]=tot;
++tot,to[tot]=x,nt[tot]=hd[y],w[tot]=z,hd[y]=tot;
}
int n,ff[N],sz[N],rt,sq[N];
int findf(int x){return ff[x]==x?x:ff[x]=findf(ff[x]);}
LL ds[N],mx;
bool cmp(int aa,int bb){return ds[aa]>ds[bb];}
void dfs(int x,int ffa,LL de)
{
ds[x]=max(ds[x],de);
for(int i=hd[x];i;i=nt[i])
{
int y=to[i];
if(y==ffa) continue;
dfs(y,x,de+w[i]);
}
if(mx<de) mx=de,rt=x;
}
int main()
{
////////QWQWQ
n=rd();
for(int i=1;i<n;++i)
{
int x=rd(),y=rd(),z=rd();
add(x,y,z);
}
mx=0,dfs(1,0,0);
int r2=rt;
mx=0,dfs(r2,0,0);
dfs(rt,0,0);
for(int i=1;i<=n;++i) sq[i]=i;
sort(sq+1,sq+n+1,cmp);
int q=rd();
while(q--)
{
LL lm=rd();
for(int i=1;i<=n;++i) ff[i]=i,sz[i]=1;
int ans=0;
for(int i=1,j=1;i<=n;++i)
{
int x=sq[i];
while(ds[sq[j]]-ds[x]>lm)
--sz[findf(sq[j])],++j;
for(int i=hd[x];i;i=nt[i])
{
int y=to[i];
if(ds[y]>=ds[x]&&findf(y)!=findf(x))
sz[findf(x)]+=sz[findf(y)],ff[findf(y)]=findf(x);
}
ans=max(ans,sz[findf(x)]);
}
printf("%d\n",ans);
}
return 0;
}
CF516D Drazil and Morning Exercise的更多相关文章
- CF516D Drazil and Morning Exercise【并查集,结论】
题目描述:一棵\(n\)个点的树,设\(d(u)=\max_{v\in V}\text{dis}(u,v)\),每次询问一个数\(l\),求一个最大的联通子图\(L\),使得\(\forall u,v ...
- 「CF516D」 Drazil and Morning Exercise
「CF516D」 Drazil and Morning Exercise 传送门 这个 \(f_i\) 显然可以通过树形 \(\texttt{DP}\) 直接求. 然后看到这种差值问题感觉就可以二分转 ...
- 【CF516D】Drazil and Morning Exercise
题目 首先我们知道,在树上距离一个点最远的点一定是直径的两个端点之一 首先两遍\(\rm dfs\)把直径求出来,定义\(d(u)\)表示点\(u\)距离其最远点的距离,有了直径我们就能求出\(d\) ...
- 【Cf #292 D】Drazil and Morning Exercise(树的直径,树上差分)
有一个经典的问题存在于这个子问题里,就是求出每个点到其他点的最远距离. 这个问题和树的直径有很大的关系,因为事实上距离每个点最远的点一定是直径的两个端点.所以我们可以很容易地进行$3$遍$Dfs$就可 ...
- 516D Drazil and Morning Exercise
分析 求出直径和最远距离d 之后我们以直径中点为根 发现父亲的d肯定不小于儿子的d 于是从下往上启发式合并维护与子树根的值相差L内的个数即可 代码 #include<bits/stdc++.h& ...
- Codeforces 516D - Drazil and Morning Exercise(树的直径+并查集)
Codeforces 题目传送门 & 洛谷题目传送门 这是一道 jxd 的作业题,感觉难度不是特别大(虽然我并没有自己独立 AC,不过也可能是省选结束了我的脑子也没了罢(((,就随便写写罢 u ...
- IOI2020 国家集训队作业 泛做
题号 题目名称 rating 算法 完成情况 CF504E Misha and LCP on Tree CF505E Mr.Kitayuta vs. Bamboos CF506E Mr.Kitayut ...
- MIT 6.828 JOS学习笔记12 Exercise 1.9
Lab 1中Exercise 9的解答报告 Exercise 1.9: 判断一下操作系统内核是从哪条指令开始初始化它的堆栈空间的,以及这个堆栈坐落在内存的哪个地方?内核是如何给它的堆栈保留一块内存空间 ...
- MIT 6.828 JOS学习笔记13 Exercise 1.10
Lab 1 Exercise 10 为了能够更好的了解在x86上的C程序调用过程的细节,我们首先找到在obj/kern/kern.asm中test_backtrace子程序的地址, 设置断点,并且探讨 ...
随机推荐
- pytorch-Alexnet 网络
Alexnet网络结构, 相比于LeNet,Alexnet加入了激活层Relu, 以及dropout层 第一层网络结构: 11x11x3x96, 步长为4, padding=2 第二层网络结构: 5x ...
- ActiveMQ的作用总结(应用场景及优势)以及springboot+activeMq 实战
业务场景说明: 消息队列在大型电子商务类网站,如京东.淘宝.去哪儿等网站有着深入的应用, 队列的主要作用是消除高并发访问高峰,加快网站的响应速度. 在不使用消息队列的情况下,用户的请求数据直接写入 ...
- 关于域名解析|A记录|CNAME等
1. A记录 又称IP指向,用户可以在此设置子域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器. 说明: ·指向的目标主机地址类型只能使用IP地址: 附加说明: 1) 泛域名解析 即将该域 ...
- mysql 截取字符函数substring(param1,param2,param3) 的用法
substring(paramter1,paramter2,paramter3) 截取字段长度 paramter1 被截取的字段paramter2 从第几位开始截取,负数表示从末尾开始数,的位数开始 ...
- ajax基础------备忘
1:register.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- delphi循环校验数据集
function XXXXXFrom.CheckData(Sender: TObject): Boolean; var tmpcds:TfwClientDataset; begin Result:=F ...
- Mysql——常用命令
查看版本:show variables like '%version%' 或者 select version() 是否开启binlog:show variables like 'log_bin ...
- Java日志体系(六)log4j2
1.1 简介 log4j2,一个日志的实现框架,是log4j的升级版本,于2014年7月正式亮相.与第一代log4j不同,log4j2完全重写了log4j的日志实现,并不是在原有基础上进行的升级,解决 ...
- SQL引擎及事务支持
查看当前表引擎 SHOW CREATE TABLE table_name MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行数度比InnoDB类 ...
- STS中AOP的实现
1. 在pom.xml中加入aop依赖: <groupId>org.springframework.boot</groupId> <artifactId>sprin ...