[luogu P3806] 【模板】点分治1
[luogu P3806] 【模板】点分治1
题目背景
感谢hzwer的点分治互测。
题目描述
给定一棵有n个点的树
询问树上距离为k的点对是否存在。
输入输出格式
输入格式:
n,m 接下来n-1条边a,b,c描述a到b有一条长度为c的路径
接下来m行每行询问一个K
输出格式:
对于每个K每行输出一个答案,存在输出“AYE”,否则输出”NAY”(不包含引号)
输入输出样例
说明
对于30%的数据n<=100
对于60%的数据n<=1000,m<=50
对于100%的数据n<=10000,m<=100,c<=1000,K<=10000000
首先这是点分裸题啊。。刷过点分的dalao都知道。
但似乎这题我只会calc里面n^2暴力扫?用不来m的100?
没事,让我们证明一下复杂度。。
T(n)=2T(n/2)+n^2。
然后我并不会主定理。。画了下二叉树图。
然后发现T(n)=2n^2(n^2+(1/2)n^2+(1/4)n^2+...)。
然后,因为n=10000,把常数写小一点,有点信仰就可以了。
code:
#include <cstdio> #include <cstring> #include <algorithm> #define ms(a,x) memset(a,x,sizeof a) using namespace std; ,D=; ],son[N<<],w[N<<]; int ro,subn,cnt,siz[N],mxs[N],dep[N],d[N]; int m,c[D]; bool vis[N]; void add (int x,int y,int z) { nxt[++tot]=lnk[x],lnk[x]=tot; son[tot]=y,w[tot]=z; } void dfs_size(int x,int p) { siz[x]=,mxs[x]=; for (int j=lnk[x]; j; j=nxt[j]) { if (son[j]==p||vis[son[j]]) continue; dfs_size(son[j],x); siz[x]+=siz[son[j]]; if (mxs[x]<siz[son[j]]) mxs[x]=siz[son[j]]; } if (mxs[x]<subn-mxs[x]) mxs[x]=subn-mxs[x]; if (mxs[x]<mxs[ro]) ro=x; } void dfs_depth (int x,int p) { dep[++cnt]=d[x]; for (int j=lnk[x]; j; j=nxt[j]) { if (son[j]==p||vis[son[j]]) continue; d[son[j]]=d[x]+w[j]; dfs_depth(son[j],x); } } void calc (int x,int v) { cnt=,dfs_depth(x,); ; i<cnt; ++i) { ; j<=cnt; ++j) { c[dep[i]+dep[j]]+=v; } } } void node_divide (int x) { ro=,dfs_size(x,),vis[ro]=; d[ro]=,calc(ro,); for (int j=lnk[ro]; j; j=nxt[j]) { if (vis[son[j]]) continue; calc(son[j],-); subn=siz[son[j]]; node_divide(son[j]); } } int main() { int x,y,z; scanf("%d%d",&n,&m); ; i<n; ++i) { scanf("%d%d%d",&x,&y,&z); add(x,y,z),add(y,x,z); } ro=,mxs[]=n,subn=n; node_divide(); ; i<=m; ++i) { scanf("%d",&x); printf(?"AYE":"NAY"); } ; }
[luogu P3806] 【模板】点分治1的更多相关文章
- [洛谷P3806] [模板] 点分治1
洛谷 P3806 传送门 这个点分治都不用减掉子树里的了,直接搞就行了. 注意第63行 if(qu[k]>=buf[j]) 不能不写,也不能写成>. 因为这个WA了半天...... 如果m ...
- luoguP4721 【模板】分治 FFT
P4721 [模板]分治 FFT 链接 luogu 题目描述 给定长度为 \(n-1\) 的数组 \(g[1],g[2],..,g[n-1]\),求 \(f[0],f[1],..,f[n-1]\),其 ...
- [luogu P3384] [模板]树链剖分
[luogu P3384] [模板]树链剖分 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点 ...
- 洛谷 P4721 【模板】分治 FFT 解题报告
P4721 [模板]分治 FFT 题目背景 也可用多项式求逆解决. 题目描述 给定长度为 \(n−1\) 的数组 \(g[1],g[2],\dots,g[n-1]\),求 \(f[0],f[1],\d ...
- Luogu P2742 模板-二维凸包
Luogu P2742 模板-二维凸包 之前写的实在是太蠢了.于是重新写了一个. 用 \(Graham\) 算法求凸包. 注意两个向量 \(a\times b>0\) 的意义是 \(b\) 在 ...
- LG4721 【模板】分治 FFT
P4721 [模板]分治 FFT 题目背景 也可用多项式求逆解决. 题目描述 给定长度为 $n-1$ 的数组 $g[1],g[2],..,g[n-1]$,求 $f[0],f[1],..,f[n-1]$ ...
- luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树)(主席树)
luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目 #include<iostream> #include<cstdlib> #include< ...
- 模板·点分治(luogu P3806)
[模板]洛谷·点分治 1.求树的重心 树的重心:若A点的子树中最大的子树的size[] 最小时,A为该树的中心 步骤: 所需变量:siz[x] 表示 x 的子树大小(含自己),msz[x] 表示 其子 ...
- Luogu P3806 点分治模板1
题意: 给定一棵有n个点的树询问树上距离为k的点对是否存在. 分析: 这个题的询问和点数都不多(但是显然暴力是不太好过的,即使有人暴力过了) 这题应该怎么用点分治呢.显然,一个模板题,我们直接用套路, ...
随机推荐
- Docker学习资源
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口. ...
- php 防跨站表单提交
一种最优方式防跨站表单提交,用户限时token 就是生成一个随机且变换频繁加密字符串(可逆和不可逆).放在表单中,等到表单提交后检查. 这个随机字符串如果和当前用户身份相关联的话,那么攻击者伪造请求会 ...
- 小程序如何封装自定义组件(Toast)
1.创建和pages 同级的component目录新建一个myToast目录 例如: 2.myToast.wxml文件内容: <!-- 自定义toast组件 --> <!-- nam ...
- Python数据分析Pandas库之熊猫(10分钟一)
pandas熊猫10分钟教程 排序 df.sort_index(axis=0/1,ascending=False/True) df.sort_values(by='列名') import numpy ...
- 【shell】shuf命令提取文件的随机行
shuf命令可以随机提取一个文本文件的不同行,输出到文件或者标准输出中. shuf 用法: shuf [选项]... [文件] 或者: shuf -e [选项]... [参数]... 或者: shuf ...
- 运用java反射机制获取实体方法报错,java.lang.NoSuchMethodException: int.<init>(java.lang.String)
错误的原因是我的Student实体,成员变量数据类型,使用了int基本数据类型,改成Integer包装类型即可.
- php项目命名规范
命名规范 ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范: 目录和文件 目录使用小写+下划线: 类库.函数文件统一以.php为后缀: 类的文件名均以命名空间定义,并 ...
- 【转载】SSH协议及其应用
原文作者:阮一峰 链接: http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html http://www.ruanyifeng.com/ ...
- shell编程(二)之算术运算
bash中的算术运算 +.-./.%.* 实现算术运算 1. let var=算术表达式 2. var=$[算术表达式] 3. var=$((算术表达式)) 4. var=$(expr arg1 ar ...
- Valse2019笔记——弱监督视觉理解
程明明(南开大学):面向开放环境的自适应视觉感知 (图片来自valse2019程明明老师ppt) 面向识别与理解的神经网络共性技术 深度神经网络通用架构 -- VggNet(ICLR'15).ResN ...