[BZOJ1316]树上的询问 点分治
1316: 树上的询问
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 1017 Solved: 287
[Submit][Status][Discuss]
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
Source
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define maxn 100000
using namespace std;
int n,q;
int ask[maxn];
int ans[maxn];
struct edge {
int to,next,c;
}e[maxn*];
int head[maxn],cnt;
void add(int u,int v,int c){e[cnt].to=v;e[cnt].next=head[u];e[cnt].c=c;head[u]=cnt++;}
int root;
int vis[maxn],size[maxn],sum,f[maxn];
void findrt(int x,int fa) {
size[x]=;f[x]=;
for(int i=head[x];i>=;i=e[i].next) {
int to=e[i].to;if(to==fa||vis[to]) continue;
findrt(to,x);
size[x]+=size[to];
f[x]=max(f[x],size[to]);
}
f[x]=max(f[x],sum-size[x]);
if(f[x]<f[root]) root=x;
}
int dis[maxn],t[maxn],tt,tmp,num[maxn];
int dfs(int x,int fa,int d) {
dis[++tt]=d;
for(int i=head[x];i>=;i=e[i].next) {
int to=e[i].to;if(to==fa||vis[to]) continue;
dfs(to,x,d+e[i].c);
}
}
void cal(int x,int fl,int d) {
tt=;tmp=;
dfs(x,,d);
sort(dis+,dis+tt+);
for(int i=;i<=tt;i++) {
if(dis[i]!=dis[i-]||i==) dis[++tmp]=dis[i],num[tmp]=;
else num[tmp]++;
}
for(int i=;i<=q;i++) {
for(int j=;j<=tmp;j++)
if(num[j]>=&&dis[j]*==ask[i]) ans[i]+=fl*num[j]*(num[j]-);
int l=,r=tmp;
while(l<r) {
if(dis[l]+dis[r]>ask[i]&&l<r) r--;
else {
if(dis[l]+dis[r]==ask[i]) ans[i]+=fl*num[l]*num[r];
l++;
}
}
} }
void work(int x) {
vis[x]=;cal(x,,);
for(int i=head[x];i>=;i=e[i].next) {
int to=e[i].to;if(vis[to]) continue;
cal(to,-,e[i].c);
root=;sum=size[to];findrt(to,x);
work(root);
}
}
int main() {
memset(head,-,sizeof(head));
scanf("%d%d",&n,&q);
for(int i=;i<n;i++) {
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);add(b,a,c);
}
for(int i=;i<=q;i++) scanf("%d",&ask[i]);
f[]=;sum=n;
findrt(,);
work(root);
for(int i=;i<=q;i++)
if(ans[i]>||!ask[i]) printf("Yes\n");
else printf("No\n");
}
[BZOJ1316]树上的询问 点分治的更多相关文章
- 【BZOJ1316】树上的询问 点分治+set
[BZOJ1316]树上的询问 Description 一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No. Input 第一行两个整数n, ...
- [bzoj1316]树上的询问_点分治
树上的询问 bzoj-1316 题目大意:一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No. 注释:$1\le n\le 10^4$,$1\ ...
- BZOJ 1316: 树上的询问( 点分治 + 平衡树 )
直接点分治, 用平衡树(set就行了...)维护. -------------------------------------------------------------------------- ...
- 【点分治】bzoj1316 树上的询问
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; #defin ...
- [bzoj1316] 树上的询问
裸的点分治.. 及时把已经确定的询问清掉就能快不少.时间复杂度O(nlogn*p) #include<cstdio> #include<iostream> #include&l ...
- BZOJ_1316_树上的询问_点分治
BZOJ_1316_树上的询问_点分治 Description 一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No. Input 第一行两个整 ...
- 【BZOJ-3784】树上的路径 点分治 + ST + 堆
3784: 树上的路径 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 462 Solved: 153[Submit][Status][Discuss ...
- 【Luogu2664】树上游戏(点分治)
[Luogu2664]树上游戏(点分治) 题面 洛谷 题解 很好的一道点分治题. 首先直接点分治,考虑过每个分治重心的链的贡献. 我们从分治重心开始找每种颜色,强制令一种颜色只在其到分治重心的链上第一 ...
- 【bzoj1316】树上的询问 树的点分治+STL-set
题目描述 一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No. 输入 第一行两个整数n, p分别表示点的个数和询问的个数. 接下来n-1行每行 ...
随机推荐
- linux tcpdump抓包,wireshark实时解析
转自: http://www.freebuf.com/articles/wireless/6517.html 由于CentOS7上yum安装的wireshark对CoAP的解析支持不太完善,而我w ...
- java05笔记
- 【bzoj3052】[wc2013]糖果公园 带修改树上莫队
题目描述 给出一棵n个点的树,每个点有一个点权,点权范围为1~m.支持两种操作:(1)修改一个点的点权 (2)对于一条路径,求$\sum\limits_{i=1}^m\sum\limits_{j=1} ...
- 【题解】[国家集训队]Crash的数字表格 / JZPTAB
求解\(\sum_{i = 1}^{n}\sum_{j = 1}^{m}lcm\left ( i,j \right )\). 有\(lcm\left ( i,j \right )=\frac{ij}{ ...
- Contest Hunter 模拟赛09 A [线段树维护斜率]
题面 传送门 思路 首先看看我们到底要干什么:有$1e6$次询问,遍历$i$,每次要求一个形如$b_i \ast a_j - a_i \ast b_j$的东西的最大值 考虑如果一个$j$的决策在当前的 ...
- JSONP以及Spring对象MappingJacksonValue的使用方式
什么是JSONP?,以及Spring对象MappingJacksonValue的使用方式 原文: https://blog.csdn.net/weixin_38111957/article/detai ...
- HttpClient测试类请求端和服务端即可能出现乱码的解决
junit HttpClient 请求端 代码: package com.taotao.httpclient; import java.util.ArrayList; import java.util ...
- yaf的安装
http://kenby.iteye.com/blog/1979899 yaf源码分析学习网站 # wget https://github.com/laruence/php-yaf/archive/m ...
- tengine的安装
tengine的安装参考此博文: http://www.cnblogs.com/zlslch/p/6035145.html (1)下载tengine的压缩包 (2)解压缩 (3)进入目录./confi ...
- 在Maven中怎么配置外部Jar
转摘自:http://liugang594.iteye.com/blog/1677712 假设我们有一个Maven的project,其中有些Jar包不是来自Maven库的,是存在本地的某些Jar文件, ...