BZOJ_1316_树上的询问_点分治
BZOJ_1316_树上的询问_点分治
Description
Input
Output
Sample Input
1 2 5
1 3 7
1 4 1
3 5 2
3 6 3
1
8
13
14
Sample Output
Yes
No
Yes
HINT
30%的数据,n≤100.
100%的数据,n≤10000,p≤100,长度≤1000000.
做完此题可看下POJ 3237 Tree
和Race那道题差不多,由于p很小可以暴力统计。
时间复杂度O(p*n*logn)
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 10050
#define maxl 1000000
int head[N],to[N<<1],nxt[N<<1],val[N<<1],cnt,n,m;
int fag[N],siz[N],ask[150],tot,solved[150],a[N],b[N],dis[N],root;
bool used[N],buc[1000010][2];
inline void add(int u,int v,int w) {
to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt; val[cnt]=w;
}
void getroot(int x,int y) {
fag[x]=0; siz[x]=1;
int i;
for(i=head[x];i;i=nxt[i]) {
if(to[i]!=y&&!used[to[i]]) {
getroot(to[i],x);
siz[x]+=siz[to[i]];
fag[x]=max(fag[x],siz[to[i]]);
}
}
fag[x]=max(fag[x],tot-siz[x]);
if(fag[root]>fag[x]) {root=x;}
}
void getdep(int x,int y) {
int i;
if(dis[x]<=maxl){
a[++a[0]]=dis[x];
b[++b[0]]=dis[x];
}
siz[x]=1;
for(i=head[x];i;i=nxt[i]) {
if(to[i]!=y&&!used[to[i]]) {
dis[to[i]]=dis[x]+val[i];
getdep(to[i],x);
siz[x]+=siz[to[i]];
}
}
}
void getsiz(int x,int y) {
int i;
siz[x]=1;
for(i=head[x];i;i=nxt[i]) if(to[i]!=y&&!used[to[i]]) {
getsiz(to[i],x);
siz[x]+=siz[to[i]];
}
}
void work(int x) {
used[x]=1;
int i,j,k;
dis[x]=0;
b[0]=0;
b[++b[0]]=0;
for(i=head[x];i;i=nxt[i]) if(!used[to[i]]) {
a[0]=0;
a[++a[0]]=0;
dis[to[i]]=val[i];
getdep(to[i],0);
for(k=1;k<=m;k++) if(!solved[k]) {
for(j=1;j<=a[0];j++) {
if(a[j]<=ask[k]&&buc[ask[k]-a[j]][0])
solved[k]=1;
}
}
for(j=1;j<=a[0];j++) buc[a[j]][0]=1,buc[a[j]][1]=0;
}
for(i=1;i<=b[0];i++) {
buc[b[i]][0]=buc[b[i]][1]=0;
}
getsiz(x,0);
for(i=head[x];i;i=nxt[i]) if(!used[to[i]]) {
tot=siz[to[i]];
root=0;
getroot(to[i],0);
work(root);
}
}
int main() {
scanf("%d%d",&n,&m);
int i,x,y,z;
for(i=1;i<n;i++) {
scanf("%d%d%d",&x,&y,&z);
add(x,y,z); add(y,x,z);
}
for(i=1;i<=m;i++) {
scanf("%d",&ask[i]);
if(!ask[i]) solved[i]=1;
}
fag[0]=100000000;
tot=n;
getroot(1,0);
work(root);
for(i=1;i<=m;i++) {
if(solved[i]) puts("Yes");
else puts("No");
}
}
BZOJ_1316_树上的询问_点分治的更多相关文章
- [bzoj1316]树上的询问_点分治
树上的询问 bzoj-1316 题目大意:一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No. 注释:$1\le n\le 10^4$,$1\ ...
- BZOJ 1316: 树上的询问 (点分治+set)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1316 因为只要求存在某条路径长度为K,所以点分,然后用set判断差值是否在set中就可以了. ...
- BZOJ 1316: 树上的询问( 点分治 + 平衡树 )
直接点分治, 用平衡树(set就行了...)维护. -------------------------------------------------------------------------- ...
- 【BZOJ1316】树上的询问 点分治+set
[BZOJ1316]树上的询问 Description 一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No. Input 第一行两个整数n, ...
- [BZOJ1316]树上的询问 点分治
1316: 树上的询问 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1017 Solved: 287[Submit][Status][Discus ...
- BZOJ_3697_采药人的路径_点分治
BZOJ_3697_采药人的路径_点分治 Description 采药人的药田是一个树状结构,每条路径上都种植着同种药材. 采药人以自己对药材独到的见解,对每种药材进行了分类.大致分为两类,一种是阴性 ...
- BZOJ_2152_聪聪可可_点分治
BZOJ_2152_聪聪可可_点分治 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)…… ...
- BZOJ_3781_小B的询问_莫队
BZOJ_3781_小B的询问_莫队 Description 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值 ...
- 【bzoj1316】树上的询问 树的点分治+STL-set
题目描述 一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No. 输入 第一行两个整数n, p分别表示点的个数和询问的个数. 接下来n-1行每行 ...
随机推荐
- Go语言开发区块链只需180行代码
区块链开发用什么语言?通过本文你将使用Go语言开发自己的区块链(或者说用go语言搭建区块链).理解哈希函数是如何保持区块链的完整性.掌握如何用Go语言编程创造并添加新的块.实现多个节点通过竞争生成块. ...
- java之Spring(IOC)装配Bean(手动装配、自动装配、注解装配)
在上一篇控制反转中我们看到了依靠一个Bean文件来实现对代码的控制,可谓十分便捷,再也不用去实例化对象了,2333~~~ 1.手动装配 <bean id="todo" cla ...
- 有终将被编程潮流淹没的程序员,那是因为没学python人工智能吧?
2017年被称为中国人工智能元年--在两会时期,人工智能曾经成为国度计策,同时被写进当局报告.在从前的一年里,人工智能获得注重,已逐步浸透到别的行业,无人超市.主动驾驶.人脸识别.智能家居等" ...
- 用C++实现一个不能被继承的类
#include<iostream> using namespace std; class Gradpa { friend class Parent;//声明public或者private ...
- Java 算法(二)
[程序9] 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数 //第一种public class A09 {publi ...
- Selenium2Lib库之鼠标事件常用关键字实战
1.2 鼠标事件常用关键字 1.2.1 Click Button关键字按F5 查看Click Button关键字的说明,如下图: Click Button关键字 是用于点击页面上的按钮.参数locat ...
- Junit-4.1.2 @Test 使用
学习使用Junit-4.1.2 @Test来做单元测试 1.下载jar包 下载junit-4.12.jar 下载hamcrest-core-1.3.jar 2.在External Libraries中 ...
- Code Review Checklist
左按:当年需要一份详细的代码评审清单作参考,翻译了此文. 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] General Code Smoke Test 通用测试 Comm ...
- IM进化论:腾讯也难逃被颠覆掉的命运
在一定程度上,腾讯代表了中国IM领域的过去和未来.但有句俗话,后来推前浪,前浪被拍死在沙滩上,"生死腾讯"也总会变为生和死,因为腾讯很可能会有被颠覆掉的一天.腾讯的IM接口是个庞然 ...
- redis常见重要性能指标数据分析和相关问题解决方案
性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息.通过这些信息来分析文章后面提到的一些性能指标. info命令输出的数 ...