[bzoj1316]树上的询问_点分治
树上的询问 bzoj-1316
题目大意:一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No.
注释:$1\le n\le 10^4$,$1\le p\le 100$,长度$\le 10^6$。
想法:有根树tm是啥意思?根在jb哪呢?老子我瞅tm这么半天也没看见根在哪呢??这题点分治即可。我们用点分治的第二种:分别计算子树,然后用之前的信息更新答案。对于此题,我们可以直接维护一个set就行。
最后,附上丑陋的代码... ...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#define N 10010
using namespace std;
set<int>s;
int n,m,sum,root,cnt;
int a[N],dic[N<<1],size[N],mx[N],deep[N];
bool vis[N],ans[N];
int to[N<<1],head[N],val[N<<1],nxt[N<<1],tot;
inline void add(int x,int y,int z)
{
to[++tot]=y;
val[tot]=z;
nxt[tot]=head[x];
head[x]=tot;
}
void getroot(int pos,int fa)
{
mx[pos]=0,size[pos]=1;
for(int i=head[pos];i;i=nxt[i])
{
if(to[i]==fa||vis[to[i]]) continue;
getroot(to[i],pos);
size[pos]+=size[to[i]];
mx[pos]=max(mx[pos],size[to[i]]);
}
mx[pos]=max(mx[pos],sum-size[pos]);
if(mx[root]>mx[pos]) root=pos;
}
void getdeep(int pos,int fa)
{
size[pos]=1;
dic[++cnt]=deep[pos];
for(int i=head[pos];i;i=nxt[i])
{
if(to[i]==fa||vis[to[i]]) continue;
deep[to[i]]=deep[pos]+val[i];
getdeep(to[i],pos);
size[pos]+=size[to[i]];
}
}
void dispose(int pos)
{
// cout << " Fuck && Shit " << endl ;
vis[pos]=true;
s.clear();
s.insert(0);
for(int i=head[pos];i;i=nxt[i])
{
// cout << " Fuck 2" << endl ;
if(vis[to[i]]) continue;
cnt=0; deep[to[i]]=val[i],getdeep(to[i],0);
for(int j=1;j<=cnt;j++)
{
for(int k=1;k<=m;k++)
{
if(s.find(a[k]-dic[j])!=s.end()) ans[k]=1;
}
}
for(int j=1;j<=cnt;j++) s.insert(dic[j]);
}
for(int i=head[pos];i;i=nxt[i])
{
if(vis[to[i]]) continue;
sum=size[to[i]];
root=0;
getroot(to[i],0);
dispose(root);
// cout << " Fuck " << endl ;
}
}
int main()
{
scanf("%d%d",&n,&m);
int x,y,c;
for(int i=1;i<n;i++)
{
scanf("%d%d%d",&x,&y,&c);
add(x,y,c),add(y,x,c);
}
// cout << "Fuck1" << endl ;
for(int i=1;i<=m;i++)
{
scanf("%d",&a[i]);
if(!a[i]) ans[i]=1;
}
mx[0]=1<<30;
sum=n;
// cout << "Fuck1" << endl ;
getroot(1,0);
// cout << "Fuck1" << endl ;
dispose(root);
// cout << "Fuck : " << m << endl ;
for(int i=1;i<=m;i++)
{
printf("%s\n",ans[i]?"Yes":"No");
}
return 0;
}
小结:这种题更适合入门题。
[bzoj1316]树上的询问_点分治的更多相关文章
- BZOJ_1316_树上的询问_点分治
BZOJ_1316_树上的询问_点分治 Description 一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No. Input 第一行两个整 ...
- [BZOJ1316]树上的询问 点分治
1316: 树上的询问 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1017 Solved: 287[Submit][Status][Discus ...
- 【点分治】bzoj1316 树上的询问
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; #defin ...
- [bzoj1316] 树上的询问
裸的点分治.. 及时把已经确定的询问清掉就能快不少.时间复杂度O(nlogn*p) #include<cstdio> #include<iostream> #include&l ...
- BZOJ 1316: 树上的询问 (点分治+set)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1316 因为只要求存在某条路径长度为K,所以点分,然后用set判断差值是否在set中就可以了. ...
- 【BZOJ1316】树上的询问 点分治+set
[BZOJ1316]树上的询问 Description 一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No. Input 第一行两个整数n, ...
- BZOJ 1316: 树上的询问( 点分治 + 平衡树 )
直接点分治, 用平衡树(set就行了...)维护. -------------------------------------------------------------------------- ...
- BZOJ_3697_采药人的路径_点分治
BZOJ_3697_采药人的路径_点分治 Description 采药人的药田是一个树状结构,每条路径上都种植着同种药材. 采药人以自己对药材独到的见解,对每种药材进行了分类.大致分为两类,一种是阴性 ...
- BZOJ_2152_聪聪可可_点分治
BZOJ_2152_聪聪可可_点分治 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)…… ...
随机推荐
- javascript 将变量值作为对象属性 获取对象对应的值
例子 var var="name"; var objname="obj"; objname=objname+"."+var; alert(e ...
- Java项目打包发布
Java项目打包发布 如果只想发布为一个可执行的jar包,使用eclipse的Export功能就可以了 使用eclipse的Export功能,将项目中的所有package打包为一个pet.jar文件, ...
- PCB MS SQL SERVER版本管控工具source_safe_for_sql_server
PCB由于业务关系复杂,业务触发一个事件时,可能需与数据库多个表进行关连处理才能拿到数据结果, 而表关连并不是简单的关连,实际是要进行大量数据筛选,逻辑判断,转换等过程...这个过程是复杂的 想一想, ...
- SQLServer 使用变量动态行转列
drop table #testcreate table #test( id int identity(1,1) primary key, bizDate varchar(50), ...
- VUE-搜索过滤器
先看看效果 首先引入 <script src="https://cdn.jsdelivr.net/npm/vue"></script> HTML部分 < ...
- JavaScript中赋值运算符的使用
JavaScript中的赋值运算可以分为简单赋值运算和复合赋值运算.简单赋值运算是将赋值运算符(=)右边表达式的值保存到左边的变量中:而复合赋值运算混合了其他操作(例如算术运算操作)和赋值操作.例如: ...
- YOLO训练Pedestrain
Pedestrain dl 使用darknet训练: 1. Inria 创建 yolo-inria.cfg 从cfg/yolo-voc.2.0.cfg拷贝一份,修改batch=64, subdivi ...
- java Web(4)
Web 应用程序状态管理 通过隐藏表单域 hidden,cookie,session,重写URL来实现: cookie存在于客户端,浏览器关闭时失效 cookie原理:服务器在响应请求时将一些数据以“ ...
- mysql 5.6 中 explicit_defaults_for_timestamp参数
mysql 5.6 中 explicit_defaults_for_timestamp参数 一: 官方文档中关于explicit_defaults_for_timestamp参数说明如下: expli ...
- HDU_5724_状态压缩的sg函数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5724 题目大意:n行20列的棋盘,对于每行,如果当前棋子右边没棋子,那可以直接放到右边,如果有就跳过放 ...