[P3806] 【模板】点分治 - 点分治
辣鸡蒟蒻怎么今天才来敲这个模板题
好像还敲了很久的样子
(大雾)
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 10005;
vector<pair<int,int> > g[N];
int dis[N],siz[N],msiz[N],n,m,k[N],ans[N],u[N];
vector <int> st;
int buc[10000005];
vector <int> bl;
vector <int> wl;
void buc_push(int x) {
if(x>1e+7) return;
buc[x]=1;
bl.push_back(x);
}
int buc_query(int x) {
if(x<0 || x>1e+7) return 0;
return buc[x];
}
void buc_clear() {
for(int i=0;i<bl.size();i++)
buc[bl[i]]=0;
bl.clear();
}
void dfs1(int p,int from) {
siz[p]=1;
msiz[p]=0;
st.push_back(p);
for(int i=0;i<g[p].size();i++) {
int q=g[p][i].first, w=g[p][i].second;
if(q!=from && u[q]==0) {
dfs1(q,p);
siz[p]+=siz[q];
msiz[p]=max(msiz[p],siz[q]);
}
}
}
void dfs2(int p,int from) {
for(int i=0;i<g[p].size();i++) {
int q=g[p][i].first, w=g[p][i].second;
if(q!=from && u[q]==0) {
dis[q]=dis[p]+w;
dfs2(q,p);
}
}
}
void dfs3(int p,int from) {
for(int i=1;i<=m;i++) {
if(buc_query(k[i]-dis[p])) ans[i]=1;
}
for(int i=0;i<g[p].size();i++) {
int q=g[p][i].first, w=g[p][i].second;
if(q!=from && u[q]==0) {
dfs3(q,p);
}
}
wl.push_back(dis[p]);
}
int findroot(int p) {
st.clear();
dfs1(p,0);
int r=0,rv=1e+9;
for(int i=0;i<st.size();i++) {
msiz[st[i]]=max(msiz[st[i]],siz[p]-siz[st[i]]);
if(msiz[st[i]]<rv) r=st[i],rv=msiz[st[i]];
}
return r;
}
void calc(int p) {
dis[p]=0;
dfs2(p,0);
buc_clear();
buc_push(0);
for(int i=0;i<g[p].size();i++) {
int q=g[p][i].first, w=g[p][i].second;
if(u[q]==0) {
dfs3(q,0);
for(int j=0;j<wl.size();j++) {
buc_push(wl[j]);
}
wl.clear();
}
}
}
void solve(int p) {
int r=findroot(p);
u[r]=1;
calc(r);
for(int i=0;i<g[r].size();i++) {
int q=g[r][i].first, w=g[r][i].second;
if(u[q]==0) {
solve(q);
}
}
}
signed main() {
scanf("%lld%lld",&n,&m);
for(int i=1;i<n;i++) {
int t1,t2,t3;
scanf("%lld%lld%lld",&t1,&t2,&t3);
g[t1].push_back(make_pair(t2,t3));
g[t2].push_back(make_pair(t1,t3));
}
for(int i=1;i<=m;i++) scanf("%lld",&k[i]);
solve(1);
for(int i=1;i<=m;i++) {
cout<<(ans[i]?"AYE":"NAY")<<endl;
}
}
[P3806] 【模板】点分治 - 点分治的更多相关文章
- 洛谷 P3806 【模板】点分治1-树分治(点分治,容斥版) 模板题-树上距离为k的点对是否存在
P3806 [模板]点分治1 题目背景 感谢hzwer的点分治互测. 题目描述 给定一棵有n个点的树 询问树上距离为k的点对是否存在. 输入格式 n,m 接下来n-1条边a,b,c描述a到b有一条长度 ...
- POJ 1741.Tree and 洛谷 P4178 Tree-树分治(点分治,容斥版) +二分 模板题-区间点对最短距离<=K的点对数量
POJ 1741. Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 34141 Accepted: 11420 ...
- Codeforces 161.D. Distance in Tree-树分治(点分治,不容斥版)-树上距离为K的点对数量-蜜汁TLE (VK Cup 2012 Round 1)
D. Distance in Tree time limit per test 3 seconds memory limit per test 512 megabytes input standard ...
- 【题解】P4755 Beautiful Pair(启发式合并的思路+分治=启发式分治)
[题解]P4755 Beautiful Pair upd: 之前一个first second烦了,现在AC了 由于之前是直接抄std写的,所以没有什么心得体会,今天自己写写发现 不知道为啥\(90\) ...
- CDQ分治 & 整体分治
Part 1:CDQ分治 CDQ分治讲解博客 可以把CDQ分治理解为类似与归并排序求逆序对个数的一种分治算法(至少我现在是这么想的).先处理完左右两边各自对答案的贡献,在处理跨越左右两边的对答案的贡献 ...
- [洛谷P3806] [模板] 点分治1
洛谷 P3806 传送门 这个点分治都不用减掉子树里的了,直接搞就行了. 注意第63行 if(qu[k]>=buf[j]) 不能不写,也不能写成>. 因为这个WA了半天...... 如果m ...
- 洛谷 4721 【模板】分治 FFT——分治FFT / 多项式求逆
题目:https://www.luogu.org/problemnew/show/P4721 分治FFT:https://www.cnblogs.com/bztMinamoto/p/9749557.h ...
- 洛谷 P4721 [模板]分治FFT —— 分治FFT / 多项式求逆
题目:https://www.luogu.org/problemnew/show/P4721 分治做法,考虑左边对右边的贡献即可: 注意最大用到的 a 的项也不过是 a[r-l] ,所以 NTT 可以 ...
- luoguU60884 【模板】动态点分治套线段树
题目连接:https://www.luogu.org/problemnew/show/U60884 题意:有N个点,标号为1∼N,用N−1条双向带权通道连接,保证任意两个点能互相到达. Q次询问,问从 ...
随机推荐
- idea中MavenWeb项目不能创建Servlet的解决办法
问题 学习完maven后,用maven创建了一个web项目,然后在这个web项目中创建了一个java文件夹并标记这个目录为源码根目录,当我准备创建一个Servlet的时候发现没有,如下图 解决办法 1 ...
- openssl CVE-2016-2107 漏洞检测
最近在安装python3 时升级openssl 版本,在摸索openssl 升级过程中才发现centos6 默认安装的openssl 1.0.1e 版本是有一个严重的漏洞的(Padding oracl ...
- VMware与Centos系统安装之重置root密码
VMware与Centos系统安装之重置root密码 今日任务 1.Linux发行版的选择 2.vmware创建一个虚拟机(centos) 3.安装配置centos7 4.xshell配置连接虚拟 ...
- itest(爱测试) 4.4.0 发布,开源BUG 跟踪管理 & 敏捷测试管理软件
itest 简介 test 开源敏捷测试管理,testOps 践行者.可按测试包分配测试用例执行,也可建测试迭代(含任务,测试包,BUG)来组织测试工作,也有测试环境管理,还有很常用的测试度量:对于发 ...
- CF 150E Freezing with Style [长链剖分,线段树]
\(sol:\) 给一种大常数 \(n \log^2 n\) 的做法 考虑二分,由于是中位数,我们就二分这个中位数,\(x>=mid\)则设为 \(1\),否则为 \(-1\) 所以我们只需要找 ...
- Case Study - 用户复购行为预测
Problem 对于商家来说提前识别回头客是一件集中资源提高新品销售量的头等大事,各大商家为了吸引顾客的二次购买都会实行各种像是促销.优惠券.折扣之类的策略.按理说越了解客户,越知道客户的喜好,越能精 ...
- [TJOI2007] 足彩投注
足彩投注 题目概述 题目背景 了解足球彩票的人可能知道,足球彩票中有一种游戏叫做"胜负彩",意为猜比赛的胜负.下面是一些与胜负彩有关的术语 注 :每一组有效组合数据. 投 注:彩民 ...
- [TJOI2008] 小偷
TJOI2008小偷 题目背景 一位著名的小偷进入了一个充满宝石的储藏室,这个储藏室是由一连串房间构成的,房间的标号从0开始,想进入第i个房间就必须从第i-1个房间进入,如图: 题目描述 上图为三个房 ...
- CentOS7防火墙设置常用命令
目录 开/关/重启防火墙 查看所有开启的端口号 CentOS7环境下防火墙常用命令 开/关/重启防火墙 查看防火墙状态 firewall-cmd --state 启动防火墙 systemctl sta ...
- Java-算式填符号
题目: 某批警察叔叔正在进行智力训练:1 2 3 4 5 6 7 8 9 = 110 请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号).之间没有填入符号的数 ...