昨天教练布置的莫队作业,然后一看我老早就用 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);
}

CF375D题解的更多相关文章

  1. CF375D Tree and Queries 题解

    感觉CF的题目名都好朴素的样子 你谷链接 首先这题显然是个dsu on tree 但是我不会. 其次这题显然是个莫队.这我会啊! 然后会发现好像不是很对劲.因为每次询问都有一个k,貌似和传统的莫队数颜 ...

  2. 【题解】 Luogu CF375D Tree and Queries

    原题传送门 这道题要用树链剖分,我博客里有对树链剖分的详细介绍 我博客中对莫队的详细介绍 莫队好题 我一上来想写线段树,随后觉得不好写并弃坑 我们可以看见没有修改操作,钦定莫队 但这是在树上,所以不能 ...

  3. 题解 CF375D 【Tree and Queries】

    首先,子树上的查询问题可以通过$DFS$序转为序列问题 再一看,没有修改,可以离线,这不就是莫队吗? 我们用$sum_i$表示出现次数$\geq i$的个数 用$val_i$表示第$i$种颜色的出现次 ...

  4. 【题解】CF375D Tree and Queries

    Link \(\text{Solution:}\) 讲实话这题有点烦,不知道为啥改了下\(\text{dfs}\)就过了--原版本\(dfs\)好像没啥错啊-- 其实对于子树问题,我们求出原来树的\( ...

  5. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  6. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  7. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  8. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  9. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

随机推荐

  1. MySQL server has gone away 异常

    原因 一种可能是发送的SQL语句太长,以致超过了max_allowed_packet的大小,如果是这种原因,你只要修改my.cnf,加大max_allowed_packet的值即可. 还有一种可能是因 ...

  2. Pandas常用操作 - 去重

    1. 使用 drop_duplicates 去重 1.1 初始化数据 df = pd.DataFrame({'stu_name': ['Tom', 'Tony', 'Jack', 'Jack', np ...

  3. An incompatible version 1.1.1 of the APR based Apache Tomcat Native library is installed, while Tomcat requires version 1.1.17

    [问题现象]: 启动Tomcat时报如下类似错误信息: An incompatible version 1.1.12 of the APR based Apache Tomcat Native lib ...

  4. 记录使用WKWebView进行OC与JS交互所踩过的坑

    目录: 1.页面cookie缓存 2.允许弹出JS的弹框 3.在webview页面加载的时候,添加加载进度条 4.禁止掉webview页面的长按复制粘贴功能 5.设置webview的userAgent ...

  5. 帆软报表(finereport)控件背景色更改

    setTimeout(function() { $('.fr-trigger-btn-up').css({ "background-color": "#003399&qu ...

  6. Keycloak 团队宣布他们正在弃用大多数 Keycloak 适配器,包括Spring Security和Spring Boot

    2月14日,Keycloak 团队宣布他们正在弃用大多数 Keycloak 适配器. 其中包括Spring Security和Spring Boot的适配器,这意味着今后Keycloak团队将不再提供 ...

  7. 为什么大厂前端监控都在用GIF做埋点?

    什么是前端监控? 它指的是通过一定的手段来获取用户行为以及跟踪产品在用户端的使用情况,并以监控数据为基础,为产品优化指明方向,为用户提供更加精确.完善的服务. 如果这篇文章有帮助到你,️关注+点赞️鼓 ...

  8. torch.utils.data.DataLoader与迭代器转换

    在做实验时,我们常常会使用用开源的数据集进行测试.而Pytorch中内置了许多数据集,这些数据集我们常常使用DataLoader类进行加载. 如下面这个我们使用DataLoader类加载torch.v ...

  9. Solution -「LOJ #6053」简单的函数

    \(\mathcal{Description}\)   Link.   积性函数 \(f\) 满足 \(f(p^c)=p\oplus c~(p\in\mathbb P,c\in\mathbb N_+) ...

  10. 带分数--第四届蓝桥杯省赛C++B/C组

    第四届蓝桥杯省赛C++B/C组----带分数 思路: 1.先枚举全排列 2.枚举位数 3.判断是否满足要求 这道题也就是n=a+b/c,求出符合要求的abc的方案数.进行优化时,可以对等式进行改写,改 ...