codeforces-375D-树上莫队

题目大意:给定一棵有根树,每次询问一个节点的子树中颜色数大于等于k的颜色总数;

题目解析:搞出dfs序,其实就变成序列了,莫队也很好写,开个cnt数组记录颜色种数,再开个least数组记录至少i个的颜色个数;

AC代码:

#include
#include
#include
#include
#include
#include
using namespace std;

const int maxn = 1e5+10;

int pos[maxn];
int col[maxn],c[maxn];
int in[maxn],out[maxn];
int n,m;
struct edge
{
	int to,next;
}e[maxn<<1];
int head[maxn],tot;
void addedge(int u,int v)
{
	e[tot].to=v;
	e[tot].next=head[u];
	head[u]=tot++;
}
struct Query
{
    int l,r,id,ans,k;
    friend bool operator < (const Query &R, const Query &T)
    {
        return pos[R.l]


你可能感兴趣的:(莫队)