昨天教练布置的莫队作业,然后一看我老早就用 DSU on tree 切了,来补题解(

题意

静态树询问子树中,同一种元素的数量不小于 \(k\) 的元素有多少种。

莫队做法

容易观察到子树在 \(\rm DFS\) 序上是一段连续的区间,于是问题就转化成了区间。

维护一个桶来记录有多少种元素在区间中有 \(x\) 个,在更新的时候注意是否等于 \(k\) 即可。

DSU on tree做法

同样维护一个桶,记录同样的东西,判定也是同样的。

所以 DSU on tree 就是复杂度为 Polylog 的莫队?(大雾)

code:(只写了 DSU on tree)

#include<cstdio>
const int M=1e5+5;
int n,m,Son,f[M],siz[M],son[M],col[M],num[M],cnt[M];
struct Edge{
int to;Edge*nx;
}e[M<<1],*h[M],*qwq=e;
struct Q{
int k,ans;Q*nx;
}q[M],*t[M],*tot=q+1;
inline void Add(const int&u,const int&v){
*qwq=(Edge){v,h[u]};h[u]=qwq++;
*qwq=(Edge){u,h[v]};h[v]=qwq++;
}
void DFS(int u){
siz[u]=1;
for(Edge*E=h[u];E;E=E->nx){
int v=E->to;
if(v==f[u])continue;
f[v]=u;DFS(v);siz[u]+=siz[v];
if(siz[v]>siz[son[u]])son[u]=v;
}
}
void change(int u,bool keep){
if(keep)++cnt[++num[col[u]]];
else --cnt[num[col[u]]--];
for(Edge*E=h[u];E;E=E->nx){
int v=E->to;
if(v==f[u]||v==Son)continue;
change(v,keep);
}
}
void Query(int u,bool keep){
for(Edge*E=h[u];E;E=E->nx){
int v=E->to;
if(v==f[u]||v==son[u])continue;
Query(v,false);
}
if(son[u])Query(son[u],true),Son=son[u];
change(u,true);Son=0;
for(Q*E=t[u];E;E=E->nx)E->ans=cnt[E->k];
if(!keep)change(u,false);
}
signed main(){
register int i,u,v;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)scanf("%d",col+i);
for(i=1;i<n;++i)scanf("%d%d",&u,&v),Add(u,v);
for(i=1;i<=m;++i)scanf("%d%d",&u,&tot->k),tot->nx=t[u],t[u]=tot++;
DFS(1);Query(1,true);
for(i=1;i<=m;++i)printf("%d\n",q[i].ans);
}

最新文章

  1. linux用户权限相关内容查看
  2. UOJ#34 FFT模板题
  3. Android使用AsyncTask实现可以断点续传的DownloadManager功能
  4. JQuery 来获取数据c#中的JSON数据
  5. java多线程浅谈
  6. CodeforcesGym101116 B Bulbs
  7. c++ 09
  8. css3实现手机菜单展开收起动画
  9. 日常:css样式、选择器、个别知识点、数组array
  10. [C#网络应用编程]2、对线程的管理
  11. Java RE (正则表达式)
  12. MT【275】拉格朗日中值定理
  13. Webapi 跨域 解决解决错误No &#39;Access-Control-Allow-Origin&#39; header is present on the requested resource 问题
  14. 浅了解:react为何需要设定唯一key值(antd-table)
  15. 通过 SSH 转发TCP连接数据
  16. vue项目遇到的坑
  17. Python3在指定路径下递归定位文件中出现的字符串
  18. js 去掉重复数组
  19. 【hdu6334】【2018Multi-University-Training Contest04】Problem C. Problems on a Tree
  20. [转载]ACE的陷阱

热门文章

  1. 为 ubuntu 切换更新源
  2. zookeeper集群+kafka集群 部署
  3. Spring中声明式事务处理和编程式事务处理的区别
  4. 帆软报表(finereport)图表钻取详细类别 当前页对话框展示
  5. Ubuntu20.04.3中telnet 127.0.0.1时Unable to connect to remote host: Connection refused
  6. Nginx兼容框架的pathinfo模式与URL重写
  7. 后台运行程序-服务器、python
  8. 利用信号量semaphore实现两个进程读写同步 Linux C
  9. 使用Supervisord部署go应用
  10. 内网安全---隐藏通信隧道基础&amp;&amp;网络通信隧道之一ICMP隧道