题解 CF375D 【Tree and Queries】
首先,子树上的查询问题可以通过$DFS$序转为序列问题
再一看,没有修改,可以离线,这不就是莫队吗?
我们用$sum_i$表示出现次数$\geq i$的个数
用$val_i$表示第$i$种颜色的出现次数
那么每次修改时只要$O(1)$修改$sum$和$val$即可
详见代码
#include <bits/stdc++.h>
const int MaxN = ;
struct node
{
int val, dfn, r, id;
};
struct query
{
int l, r;
int pos, id, k;
};
struct edge
{
int next, to;
};
node a[MaxN];
query q[MaxN];
edge e[MaxN << ];
int n, m, cnt, dfscnt, size;
int head[MaxN], ans[MaxN], sum[MaxN], val[MaxN];
inline int comp(node a, node b) { return a.dfn < b.dfn; }
inline int cmp(query a, query b)
{
if (a.pos != b.pos)
return a.pos < b.pos;
return a.r < b.r;
}
inline void add_edge(int u, int v)
{
++cnt;
e[cnt].to = v;
e[cnt].next = head[u];
head[u] = cnt;
}
inline void dfs(int u)
{
a[u].dfn = ++dfscnt;
for (int i = head[u]; i; i = e[i].next)
{
int v = e[i].to;
if (!a[v].dfn)
dfs(v);
}
a[u].r = dfscnt;
}
inline int read()
{
int x = ;
char ch = getchar();
while (ch > '' || ch < '')
ch = getchar();
while (ch <= '' && ch >= '')
x = (x << ) + (x << ) + (ch ^ ), ch = getchar();
return x;
}
inline void add(int x) { ++val[a[x].val], ++sum[val[a[x].val]]; }
inline void del(int x) { --sum[val[a[x].val]], --val[a[x].val]; }
inline void solve()
{
int l = , r = ;
for (int i = ; i <= m; i++)
{
while (l > q[i].l)
--l, add(l);
while (r < q[i].r)
++r, add(r);
while (l < q[i].l)
del(l), ++l;
while (r > q[i].r)
del(r), --r;
ans[q[i].id] = sum[q[i].k];
}
}
int main()
{
n = read(), m = read();
size = pow(n, 0.55);
for (int i = ; i <= n; i++)
a[i].val = read(), a[i].id = i;
for (int i = ; i <= n - ; i++)
{
int u = read(), v = read();
add_edge(u, v);
add_edge(v, u);
}
dfs();
for (int i = ; i <= m; i++)
{
int v, k;
v = read(), k = read();
q[i].l = a[v].dfn, q[i].r = a[v].r, q[i].k = k;
q[i].id = i, q[i].pos = (q[i].l - ) / size + ;
}
std::sort(q, q + m + , cmp);
std::sort(a + , a + n + , comp);
solve();
for (int i = ; i <= m; i++)
printf("%d\n", ans[i]);
return ;
}
题解 CF375D 【Tree and Queries】的更多相关文章
- CF375D Tree and Queries 题解
感觉CF的题目名都好朴素的样子 你谷链接 首先这题显然是个dsu on tree 但是我不会. 其次这题显然是个莫队.这我会啊! 然后会发现好像不是很对劲.因为每次询问都有一个k,貌似和传统的莫队数颜 ...
- 【题解】 Luogu CF375D Tree and Queries
原题传送门 这道题要用树链剖分,我博客里有对树链剖分的详细介绍 我博客中对莫队的详细介绍 莫队好题 我一上来想写线段树,随后觉得不好写并弃坑 我们可以看见没有修改操作,钦定莫队 但这是在树上,所以不能 ...
- 【题解】CF375D Tree and Queries
Link \(\text{Solution:}\) 讲实话这题有点烦,不知道为啥改了下\(\text{dfs}\)就过了--原版本\(dfs\)好像没啥错啊-- 其实对于子树问题,我们求出原来树的\( ...
- CF375D Tree and Queries
题意翻译 给出一棵 n 个结点的树,每个结点有一个颜色 c i . 询问 q 次,每次询问以 v 结点为根的子树中,出现次数 ≥k 的颜色有多少种.树的根节点是1. 感谢@elijahqi 提供的翻译 ...
- CF375D Tree and Queries(dsu on tree)
思路 dsu on tree的板子,可惜人傻把 for(int i=fir[u];i;i=nxt[i]) 打成 for(int i=fir[u];i<=n;i++) 调了两个小时 这题要求维护& ...
- 「CF375D Tree and Queries」
题目 \(dsu\ on\ tree\)的板子题了 \(dsu\ on\ tree\)本质上一种优秀通过轻重链剖分优化到\(O(nlogn)\)的暴力 一般用来解决没有修改的允许离线的子树查询问题 首 ...
- cf375D. Tree and Queries(莫队)
题意 题目链接 给出一棵 n 个结点的树,每个结点有一个颜色 c i . 询问 q 次,每次询问以 v 结点为根的子树中,出现次数 ≥k 的颜色有多少种.树的根节点是1. Sol 想到了主席树和启发式 ...
- [Codeforces Round #221 (Div. 1)][D. Tree and Queries]
题目链接:375D - Tree and Queries 题目大意:给你一个有n个点的树,每个点都有其对应的颜色,给出m次询问(v,k),问v的子树中有多少种颜色至少出现k次 题解:先对所有的询问进行 ...
- CodeForces 375D Tree and Queries 莫队||DFS序
Tree and Queries 题意:有一颗以1号节点为根的树,每一个节点有一个自己的颜色,求出节点v的子数上颜色出现次数>=k的颜色种类. 题解:使用莫队处理这个问题,将树转变成DFS序区间 ...
- Codeforces 375D Tree and Queries(DFS序+莫队+树状数组)
题目链接 Tree and Queries 题目大意 给出一棵树和每个节点的颜色.每次询问$vj, kj$ 你需要回答在以$vj$为根的子树中满足条件的的颜色数目, 条件:具有该颜色的节点数量至少 ...
随机推荐
- 【模拟】Clock
Clock 题目描述 wls有一个钟表,当前钟表指向了某一个时间.又有一些很重要的时刻,wls想要在钟表上复现这些时间(并不需要依次复现).我们可以顺时针转动秒针,也可以逆时针转动秒针,分针和时针都会 ...
- Qt4 和 Qt5 模块的分类
Qt5 与 Qt4 其中的一个区别是底层架构进行了改变,Qt5 引入了更加详细的模块化的概念,将众多功能细分到几个模块之中,Qt4 则是一种粗略的划分.本文主要对 Qt5 和 Qt4的模块进行一个简单 ...
- Notepad++连接VMWare中Linux只能看到/root目录
如下图,使用SFTP协议连接,用root用户登录后,我一开始只能看到root下的文件.稍作修改,把下面的“Initial remote directory”设置成“/”就可以看到根目录了.
- VS.NET(C#)--1.5_VS菜单功能
VS菜单功能 文件菜单 1.新建 2.添加 编辑菜单 1.快速查找 ctrl+F 2.快速替换 ctrl+H 3.在文件中查找ctrl+shift+F 4.在文件中替换ctrl+shift+H ...
- webstorm最新激活码2019----亲测可用
亲测日期:2019.12.10 网址里面有 lookdiv.com 里面的钥匙就是lookdiv.com
- Access-Control-Max-Age
app.UseCors(builder => builder .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .AllowCreden ...
- day24-python之面向对象
1.面向对象 # name='元昊' # # gender='母' # # type='藏獒' #狗的特征 dog1={ 'name':'元昊', 'gender':'母', 'type':'藏獒' ...
- BPM业务流程管理系统_K2受邀出席QAD客户日活动,赋能企业云端智造_工作流引擎
10月17日,K2受邀参加由厦门易维主办的以“走进QAD云ERP,深耕智能制造”为主题的QAD客户日活动.本次大会是以工业4.0背景下传统制造业面临巨大压力和挑战为导向,旨在探讨如何助力企业迅速适应业 ...
- iOS UIView视图的图层控制
1.添加视图 insertSubview:atIndex: //放在子视图数组的具体索引位置 insertSubview:aboveSubview: //某个子视图前面 insertSubvi ...
- cocos creator按钮点击按钮弹起效果设置方法
如图所示: 只要设置下button的Transition的属性为Scale即可,参数自己调整下.