XXX on tree
%了发树上莫队
nlognsqrt(n)
// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9')c = getchar();
while(c <= '9' && c >= '0')x = x * 10 + c - '0',c= getchar();
return x * f;
}
const int maxn = 100007;
int n ,block,fa[maxn],siz[maxn],son[maxn],num = 0,a[maxn],out[maxn];
vector<int>v[maxn];
int dfn[maxn];
void dfs(int x,int f) {
fa[x] = f; siz[x] = 1;
dfn[x] = ++ num;
for(int i = 0;i < v[x].size();++ i) {
int V = v[x][i];
if(siz[V]) continue;
dfs(V,x);
siz[x] += siz[V];
if(siz[V] > siz[son[x]]) son[x] = V;
}
}
int happen[maxn],belong[maxn];
int ans = 0,totq = 0;
struct Query {
int l,r,id,ans;
Query(int L = 0,int R = 0,int Id = 0,int Ans = 0): l(L) , r(R), id(Id),ans(Ans) {};
bool operator < (const Query &a) const {
return belong[l] == belong[a.l] ? r < a.r : belong[l] < belong[a.l];
}
}q[maxn];
void delet(int x) {
if(-- happen[x] == 0) ans --;
}
void add(int x) {
if(++ happen[x] == 1) ans ++;
}
void mo() {
sort(q + 1,q + totq + 1);
int l = 1,r = 0,fuck = 0;
for(int i = 1;i <= totq;++ i) {
while(l < q[i].l) delet(a[l ++]);
while(l > q[i].l) add(a[-- l]);
while(r < q[i].r) add(a[++ r]);
while(r > q[i].r) delet(a[r --]);
q[i].ans = ans;
}
for(int i = 1;i <= totq;++ i)
out[q[i].id] = q[i].ans;
}
int que,ask[maxn];
void dealask() {
que = read();
for(int i = 1;i <= que;++ i) {
ask[i] = read();
for(int j = 0;j < v[ask[i]].size();++ j) {
int V = v[ask[i]][j];
if(V == fa[ask[i]]) continue;
q[++ totq] = Query(dfn[V],dfn[V] + siz[V] - 1,V,0);
}
}
}
int data[maxn];
int main() {
n = read();
block = sqrt(n);
for(int i = 1;i <= n;++ i) a[i] = data[i] = read(), belong[i] = i / block + 1;
sort(data + 1,data + n + 1);
num = unique(data + 1,data + n + 1) - data - 1;
for(int i = 1;i <= n;++ i) a[i] = lower_bound(data + 1,data + num + 1,a[i]) - data;
for(int u,V,i = 1;i < n;++ i) {
u = read(),V = read() ;
v[u].push_back(V);
v[V].push_back(u);
}
num = 0;
dfs(1,0);
dealask();
mo();
for(int i = 1;i <= que;++ i) {
int mx = 0,id = 0;
for(int j = 0 ;j < v[ask[i]].size(); ++ j) {
int to = v[ask[i]][j];
if(to == fa[ask[i]]) continue;
if(out[to] > mx || (siz[to] > siz[id] && out[to] == mx)) mx = out[to];
} printf("%d\n",siz[id]);
}
return 0;
}
XXX on tree的更多相关文章
- paip.tree 生成目录树到txt后的折叠查看
paip.tree 生成目录树到txt后的折叠查看 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.ne ...
- easyui之combotree
这几天时间比较空闲的我把easyui中比较难的控件回顾一遍 这次的总结是easyui中的combotree easyui的中文文档上说:combotree结合选择控制和下拉树,类似于combobox只 ...
- s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...
- Educational Codeforces Round 23 F. MEX Queries 离散化+线段树
F. MEX Queries time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- 混合开发 Hybird Cordova PhoneGap web 跨平台 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- docker 镜像详解
镜像的大小不等于通过docker images 看到的每个镜像大小的合集,docker镜像采用了分层的机制.上层使用共同下层,各自不同部门构建各自的独立分层. docker的镜像通过联合文件系统(un ...
- hdu KiKi's K-Number 主席树
KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- Go语言环境安装详细介绍
工具链介绍 go有两套编译工具链,分别是从plant9移植过来的gc和依赖gcc的gccgo. 官方为gc工具链提供了二进制安装包和源码, 可以根据需要选择一种安装方式.gc工具链对操作系统和CPU类 ...
- Git下载GitHub仓库里的某一个文件夹或某一个文件
从Github上下载github上的整个项目,可以用下面指令: git clone https://github.com/XXX/xxxxx.git 其中:XXX是用户在Github上的用户名 xxx ...
随机推荐
- 管理KVM虚拟机(二)
管理KVM虚拟机 工具:libvirt 官网:http://libvirt.org/ 介绍:Libvirt 库是一种实现 Linux 虚拟化功能的 Linux® API,它支持各种虚拟机监控程序,包括 ...
- Hadoop基础-MapReduce的Partitioner用法案例
Hadoop基础-MapReduce的Partitioner用法案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Partitioner关键代码剖析 1>.返回的分区号 ...
- Linux 磁盘自动挂载
磁盘代号或者装置的Label 挂载点 档案系统格式 档案系统参数 是否用dump备份 是否用fsck检查扇区 0 0 1 1 2 2 下面来写一个代表的 ...
- 流媒体技术学习笔记之(十一)Windows环境运行EasyDarwin
流媒体平台框架下载安装 Github下载 下载地址:https://github.com/EasyDarwin/EasyDarwin/releases 解压安装 选择Windows 安装平台的安装包( ...
- 重启sqlserver服务 命令
在控制台(CMD)中运行: net stop mssqlserver net start mssqlserver
- 【译】使用OpenVAS 9进行漏洞扫描
本文译自Vulnerability Scanning with OpenVAS 9 part 1: Installation & Setup系列,本文将融合目前已经发表的四个部分. Part ...
- Spark笔记之数据本地性(data locality)
一.什么是数据本地性(data locality) 大数据中有一个很有名的概念就是"移动数据不如移动计算",之所以有数据本地性就是因为数据在网络中传输会有不小的I/O消耗,如果能够 ...
- 上传插件dropzone.js实例
dropzone.js默认是Ajax上传图片给服务器,那么如何获取到图片名呢?其实我们是可以通过dropzone的success函数获取到服务器返回的数据 dropzone.js在HTML的配置如下: ...
- Python 入门基础5 --元组、字典、集合
今日目录: 一.元组 二.字典 三.集合 四.后期添加内容 一.元组 1.定义 t1 = () # 参数为for可以循环的对象(可迭代对象) 思考: 如何定义一个只有一个值的元组? ("li ...
- DVWA的Xss跨站总结
Xss跨站总结 初级防护的代码 Poc:<script>alert(1)</script> 上图防护的代码 为输入的结果就为输出的结果 中级防护的代码 Poc:<scri ...