题意

题目链接

给出一棵 n 个结点的树,每个结点有一个颜色 c i 。 询问 q 次,每次询问以 v 结点为根的子树中,出现次数 ≥k 的颜色有多少种。树的根节点是1。

Sol

想到了主席树和启发式合并。。很显然都不能做。

标算是dfs序上暴力莫队。。甘拜下风

具体实现的时候可以直接用\(tim[i]\)表示第\(i\)个颜色的出现次数,\(ans[i]\)表示出现次数多于\(i\)的颜色的种类

由于左右端点移动的时候只会对一个\(ans[i]\)产生影响,所以修改是\(O(1)\)的

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 10;
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int N, M, dfn[MAXN], rev[MAXN], tot, block, bel[MAXN], siz[MAXN], col[MAXN], tims[MAXN], Ans[MAXN], out[MAXN];
vector<int> v[MAXN];
struct Query{int id, l, r, k;bool operator < (const Query &rhs) const {return bel[l] == bel[rhs.l] ? r < rhs.r : bel[l] < bel[rhs.l];}
}Q[MAXN];
void dfs(int x, int fa) {dfn[x] = ++tot; rev[tot] = x; siz[x] = 1;for(int i = 0, to; i < v[x].size(); i++) {if((to = v[x][i]) == fa) continue;dfs(to, x); siz[x] += siz[to];}
}
void add(int x, int opt) {if(opt == 1) Ans[++tims[x]]++;else Ans[tims[x]--]--;
}
void solve() {  sort(Q + 1, Q + M + 1);int l = 1, r = 0;for(int i = 1; i <= M; i++) {while(r > Q[i].r) add(col[rev[r--]], -1);while(r < Q[i].r) add(col[rev[++r]], 1);while(l < Q[i].l) add(col[rev[l++]], -1);while(l > Q[i].l) add(col[rev[--l]], 1);out[Q[i].id] = Ans[Q[i].k];///printf("%d\n", out[Q[i].id]);}for(int i = 1; i <= M; i++) printf("%d\n", out[i]);}
int main() {N = read(); M = read(); block = sqrt(N);for(int i = 1; i <= N; i++) col[i] = read(), bel[i] = (i - 1) / block + 1;for(int i = 1; i <= N - 1; i++) {int x = read(), y = read();v[x].push_back(y); v[y].push_back(x);}   dfs(1, 0);for(int i = 1; i <= M; i++) {Q[i].id = i; int x = read(); Q[i].k = read();Q[i].l = dfn[x];Q[i].r = dfn[x] + siz[x] -1;}solve();return 0;
}
/*
*/

cf375D. Tree and Queries(莫队)相关推荐

  1. cf375D. Tree and Queries

    cf375D. Tree and Queries 题意: 给你一颗有根树,每个点都有一个颜色,有m次询问,问以u为根的子树中,相同颜色数量超过k的有多少种颜色? 题解: 这个题做法很多,有莫队分块,这 ...

  2. 【莫队/树上莫队/回滚莫队】原理详解及例题:小B的询问(普通莫队),Count on a tree II(树上莫队),kangaroos(回滚莫队)

    文章目录 问题引入 介绍莫队算法及其实现过程 时间复杂度 莫队算法适用范围 莫队奇偶优化 普通莫队:小B的询问 树上莫队:SP10707 COT2 - Count on a tree II 回滚莫队: ...

  3. CF375D Tree and Queries(dsu on tree)

    题解: 个人感觉这个题目是一个挺不错的题的.(这里就不说dsu on tree的这个过程是什么了) 我们在dsu on tree计算答案时需要有一个小小技巧去优化一下时间复杂度. 就是当我们用一个cn ...

  4. Codeforces 375D - Tree and Queries(dfs序+莫队)

    题目链接:http://codeforces.com/contest/351/problem/D 题目大意:n个数,col[i]对应第i个数的颜色,并给你他们之间的树形关系(以1为根),有m次询问,每 ...

  5. 【SPOJ】Count On A Tree II(树上莫队)

    [SPOJ]Count On A Tree II(树上莫队) 题面 洛谷 Vjudge 洛谷上有翻译啦 题解 如果不在树上就是一个很裸很裸的莫队 现在在树上,就是一个很裸很裸的树上莫队啦. #incl ...

  6. 【SPOJ COT2】Count on a tree II,树上莫队

    Time:2016.09.07 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 第一次写树上莫队 被char哥怒裱一通 实际上还是比较简单的 序列的相关维护问题转移到树上一般都要涉及 ...

  7. SP10707 COT2 - Count on a tree II【树上莫队】

    传送门 给定一颗无根树,求树上两点路径上的节点有多少不同的数字 可以离线 分析 前提,能够通过某种操作,将树上路径问题,转化成区间问题 这样,类似于求区间不同数,区间众数,区间mex等操作就能通过莫队 ...

  8. 曼哈顿距离最小生成树莫队算法

    参考资料:https://www.cnblogs.com/CsOH/p/5904430.html https://blog.csdn.net/huzecong/article/details/8576 ...

  9. hdu 4676 Sum Of Gcd 莫队+phi反演

    Sum Of Gcd 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4676 Description Given you a sequence of ...

最新文章

  1. js 输出中文乱码 解决办法
  2. File System Filter Driver Tutorial
  3. iview代码片段 去除水平menu底部横线
  4. 做中学之教与学工具箱
  5. idea中的一个子模块中的pom文件带横线、maven为灰色
  6. HTML vs XHTML vs DHTML
  7. 虚拟机ubuntu 网速慢的解决方法
  8. 彻底搞懂 MySQL 事务的隔离级别
  9. 特征选择和共线性问题
  10. 编程语言c语言vb,c语言和vb语言哪个比较简单
  11. 计算机端口错误678,Win8宽带连接出现错误678的解决方法
  12. 测试人必备的工具(常用的测试平台)
  13. 功能测试Ⅲ——缺陷及缺陷管理
  14. BZOJ3557: [Ctsc2014]随机数
  15. 操作系统学习-1. 操作系统的目标和作用
  16. 港科夜闻|香港科大海洋科学系主任兼讲座教授钱培元:成立产业推广部抢商机...
  17. 机器学习与R之朴素贝叶斯分类器
  18. 知乎电商创业准备_你准备参加早期创业了吗
  19. 干货分享:智慧工厂时代下大数据 + 智能的深度实践
  20. 虚拟服务器路由器当交换机可以吗,怎么把无线路由器设置成无线交换机_路由器当交换机怎么设置方法-192路由网...

热门文章

  1. 多线程:管cheng法
  2. 数组:三种初始化及内存分析
  3. Linux服务器硬盘更换,[ Linux ] 服务器更换硬盘
  4. hook控制浏览器的方法_Java-Hook技术-入门实践+反射、动态代理、热修复再看看
  5. 七乐彩中奖规则表_【开奖】双色球第2020094期开奖结果出炉!你中奖了吗?
  6. 大专计算机应用技术答辩,计算机应用技术专业硕士答辩.ppt
  7. android蓝牙串口 hc06,Android手机通过蓝牙模块HC-06连接Arduino串口输出
  8. mysql 5.7 window x64_window环境配置Mysql 5.7.21 windowx64.zip免安装版教程详解
  9. linux tcb,在Linux中从潜藏密码迁移至tcb怎么做?
  10. mysql数据存储到指定位置_Mysql数据库表分区存储到指定磁盘路径