CF 375D. Tree and Queries【莫队 | dsu on tree】
题意:
一棵树,询问一个子树内出现次数$≥k$的颜色有几种
强制在线见上一道
用莫队不知道比分块高到哪里去了,超好写不用调7倍速度!!!
可以用分块维护出现次数这个权值,实现$O(1)-O(\sqrt{N})$修改查询
[update 2017-03-22]还可以用dsu on tree做,并不想再写了...
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=1e5+, M=;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int n,Q,a[N],u,k; struct edge{int v,ne;}e[N<<];
int cnt,h[N];
inline void ins(int u,int v){
e[++cnt]=(edge){v,h[u]}; h[u]=cnt;
e[++cnt]=(edge){u,h[v]}; h[v]=cnt;
}
int dfc,L[N],R[N];
int t[N];
void dfs(int u,int fa){
L[u]=++dfc; a[dfc]=t[u];
for(int i=h[u];i;i=e[i].ne)
if(e[i].v!=fa) dfs(e[i].v, u);
R[u]=dfc;
} int block,m,pos[N];
struct _blo{int l,r;} b[M];
void ini(){
block=sqrt(n);
m=(n-)/block+;
for(int i=;i<=n;i++) pos[i]=(i-)/block+;
for(int i=;i<=m;i++) b[i].l=(i-)*block+, b[i].r=i*block;
b[m].r=n;
}
struct Block{
int sum[M],a[N];
void add(int x,int v) {sum[pos[x]]+=v; a[x]+=v;}
int suf(int x){
if(x>n) return ;
int p=pos[x], ans=;
if(p==m) for(int i=x;i<=n;i++) ans+=a[i];
else{
for(int i=x; i<=b[p].r; i++) ans+=a[i];
for(int i=p+; i<=m; i++) ans+=sum[i];
}
return ans;
}
}B; struct meow{
int l,r,k,id;
bool operator <(const meow &x) const {return pos[l]<pos[x.l] || (pos[l]==pos[x.l] && r<x.r);}
}q[N];
int c[N], ans[N];
inline void add(int x) {B.add(c[x], -); c[x]++; B.add(c[x], );}
inline void del(int x) {B.add(c[x], -); c[x]--; B.add(c[x], );}
void modui(){
int l=,r=;
for(int i=;i<=Q;i++){
while(r<q[i].r) r++, add(a[r]);
while(r>q[i].r) del(a[r]), r--;
while(l<q[i].l) del(a[l]), l++;
while(l>q[i].l) l--, add(a[l]);
ans[ q[i].id ]=B.suf( q[i].k );
}
}
int main(){
// freopen("in","r",stdin);
n=read(); Q=read(); ini();
for(int i=;i<=n;i++) a[i]=t[i]=read();
for(int i=;i<n;i++) ins(read(), read());
dfs(,);
for(int i=;i<=Q;i++) u=read(), k=read(), q[i]=(meow){L[u], R[u], k, i};
sort(q+, q++Q);
modui();
for(int i=;i<=Q;i++) printf("%d\n",ans[i]);
}
CF 375D. Tree and Queries【莫队 | dsu on tree】的更多相关文章
- CodeForces 375D Tree and Queries 莫队||DFS序
Tree and Queries 题意:有一颗以1号节点为根的树,每一个节点有一个自己的颜色,求出节点v的子数上颜色出现次数>=k的颜色种类. 题解:使用莫队处理这个问题,将树转变成DFS序区间 ...
- cf375D. Tree and Queries(莫队)
题意 题目链接 给出一棵 n 个结点的树,每个结点有一个颜色 c i . 询问 q 次,每次询问以 v 结点为根的子树中,出现次数 ≥k 的颜色有多少种.树的根节点是1. Sol 想到了主席树和启发式 ...
- [Codeforces375D]Tree and Queries(莫队算法)
题意:给定一棵树,每个节点有颜色,对于每个询问(u,k)询问以u为根节点的子树下有多少种颜色出现次数>=k 因为是子树,跟dfs序有关,转化为一段区间,可以用莫队算法求解 直接用一个数组统计出现 ...
- Sona && Little Elephant and Array && Little Elephant and Array && D-query && Powerful array && Fast Queries (莫队)
vjudge上莫队专题 真的是要吐槽自己(自己的莫队手残写了2个bug) s=sqrt(n) 是元素的个数而不是询问的个数(之所以是sqrt(n)使得左端点每个块左端点的范围嘴都是sqrt(n)) 在 ...
- XOR Queries(莫队+trie)
题目链接: XOR Queries 给出一个长度为nn的数组CC,回答mm个形式为(L, R, A, B)(L,R,A,B)的询问,含义为存在多少个不同的数组下标k \in [L, R]k∈[L,R] ...
- spoj COT2 - Count on a tree II 树上莫队
题目链接 http://codeforces.com/blog/entry/43230树上莫队从这里学的, 受益匪浅.. #include <iostream> #include < ...
- CFGym101138D Strange Queries 莫队/分块
正解:莫队/分块 解题报告: 传送门 ummm这题耗了我一天差不多然后我到现在还没做完:D 而同机房的大佬用了一个小时没有就切了?大概这就是大佬和弱鸡的差距趴QAQ 然后只是大概写下思想好了因为代码我 ...
- SP10707 COT2 - Count on a tree II (树上莫队)
大概学了下树上莫队, 其实就是在欧拉序上跑莫队, 特判lca即可. #include <iostream> #include <algorithm> #include < ...
- SPOJ COT2 Count on a tree II 树上莫队算法
题意: 给出一棵\(n(n \leq 4 \times 10^4)\)个节点的树,每个节点上有个权值,和\(m(m \leq 10^5)\)个询问. 每次询问路径\(u \to v\)上有多少个权值不 ...
随机推荐
- c语言基础学习03
=============================================================================涉及到的知识点有:编码风格.c语言的数据类型. ...
- TypeScript装饰器(decorators)
装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上,可以修改类的行为. 装饰器使用 @expression这种形式,expression求值后必须为一个函数,它会在运行时被 ...
- Arrays类详解
数组是数据结构中最简单的一种类型.在平常的使用上也比较多见.今天就来总结一下数组在使用过程中的一些心得 1.java中包装数组的一些基本用法的抽象类 java.util.Arrays.这个类中包含操 ...
- asp.net网站管理工具 遇到错误。请返回上一页并重试。
原因:项目的路径里有“#”号.
- dedecms后台怎么添加发布软件?织梦后台软件内容管理
使用织梦cms有很多的功能,其中有一个是在dedecms后台添加发布软件,然后在前台大家可以直接下载软件,在织梦cms后台怎么添加发布软件呢?下面是织梦软件内容管理的主要操作步骤. 使用织梦cms有很 ...
- openfire服务器+Spark搭建即时聊天系统 & 阿里云的初步探索
晚上出去和洋仔吃了涮肉,喝了点啤酒,不知不觉就聊到了11点,感觉他工作状态还不错,emmm...都要加油吧.虽然没有当时去山西零下二十多度那么夸张,这几天北京的冬夜还是有点小冷的.好了进入正题: 一. ...
- Hadoop问题:apt-get install docker-engine -> Depends: init-system-helpers (>= 1.18~) but 1.14 is to be installed
问题描述:$ apt-get install docker-engine -> Depends: init-system-helpers (>= 1.18~) but 1.14 is to ...
- Java数据持久层框架 MyBatis之API学习十(Logging详解)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- python 与redis
一.redis安装 源码安装: 1.wget http://download.redis.io/redis-stable.tar.gz 2.yum install gcc 3.tar zx ...
- hive(II)--sql考查的高频问题
在了解别人hive能力水平的时候,不管是别人问我还是我了解别人,有一些都是必然会问的东西.问的问题也大都大同小异.这里总结一下我遇到的那些hive方面面试可能涉及的问题 1.行转列(列转行) 当我们建 ...