这个题有一个技巧:把颜色压到一个long long 上。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
typedef long long LL;
LL lft[],c[];
vector<int> e[];
int n,m;
int pp[],lp[],rp[],len;
void dfs(int u,int fa)
{
pp[++len]=u;lp[u]=len;
for(auto& v:e[u])
if(v!=fa)
dfs(v,u);
rp[u]=len;
}
#define mid ((l+r)>>1)
#define lc (num<<1)
#define rc (num<<1|1)
LL dat[],setv[];
void build(int l,int r,int num)
{
setv[num]=-;
if(l==r) {dat[num]=c[pp[l]];return;}
build(l,mid,lc);build(mid+,r,rc);
dat[num]=dat[lc]|dat[rc];
}
int L,R;LL x;
void pd(int l,int r,int num)
{
if(setv[num]!=-)
{
dat[lc]=setv[num];dat[rc]=setv[num];
setv[lc]=setv[num];setv[rc]=setv[num];
setv[num]=-;
}
}
void change(int l,int r,int num)
{
if(L<=l&&r<=R) {dat[num]=x;setv[num]=x;return;}
pd(l,r,num);
if(L<=mid) change(l,mid,lc);
if(mid<R) change(mid+,r,rc);
dat[num]=dat[lc]|dat[rc];
}
LL query(int l,int r,int num)
{
if(L<=l&&r<=R) return dat[num];
pd(l,r,num);
LL ans=;
if(L<=mid) ans|=query(l,mid,lc);
if(mid<R) ans|=query(mid+,r,rc);
return ans;
}
int main()
{
int i,a,b,v,idx;
lft[]=;
for(i=;i<=;i++) lft[i]=lft[i-]<<;
scanf("%d%d",&n,&m);
for(i=;i<=n;i++) scanf("%lld",&c[i]),c[i]=lft[c[i]];
for(i=;i<n;i++)
{
scanf("%d%d",&a,&b);
e[a].push_back(b);e[b].push_back(a);
}
dfs(,);
build(,n,);
while(m--)
{
scanf("%d",&idx);
if(idx==)
{
scanf("%d%lld",&v,&x);x=lft[x];
L=lp[v];R=rp[v];change(,n,);
}
else if(idx==)
{
scanf("%d",&v);L=lp[v];R=rp[v];
printf("%d\n",__builtin_popcountll(query(,n,)));
}
}
return ;
}

New Year Tree CodeForces -620E的更多相关文章

  1. Z - New Year Tree CodeForces - 620E 线段树 区间种类 bitset

    Z - New Year Tree CodeForces - 620E 这个题目还没有写,先想想思路,我觉得这个题目应该可以用bitset, 首先这个肯定是用dfs序把这个树转化成线段树,也就是二叉树 ...

  2. Vasya and a Tree CodeForces - 1076E(线段树+dfs)

    I - Vasya and a Tree CodeForces - 1076E 其实参考完别人的思路,写完程序交上去,还是没理解啥意思..昨晚再仔细想了想.终于弄明白了(有可能不对 题意是有一棵树n个 ...

  3. Distance in Tree CodeForces - 161D

    Distance in Tree CodeForces - 161D 题意:给一棵n个结点的树,任意两点之间的距离为1,现在有点u.v,且u与v的最短距离为k,求这样的点对(u,v)的个数((u,v) ...

  4. Water Tree CodeForces 343D 树链剖分+线段树

    Water Tree CodeForces 343D 树链剖分+线段树 题意 给定一棵n个n-1条边的树,起初所有节点权值为0. 然后m个操作, 1 x:把x为根的子树的点的权值修改为1: 2 x:把 ...

  5. Codeforces 620E New Year Tree(DFS序 + 线段树)

    题目大概说给一棵树,树上结点都有颜色(1到60),进行下面两个操作:把某结点为根的子树染成某一颜色.询问某结点为根的子树有多少种颜色. 子树,显然DFS序,把子树结点映射到连续的区间.而注意到颜色60 ...

  6. CodeForces 620E New Year Tree

    线段树+位运算 首先对树进行DFS,写出DFS序列,记录下每一个节点控制的区间范围.然后就是区间更新和区间查询了. 某段区间的颜色种类可以用位运算来表示,方便计算. 如果仅有第i种颜色,那么就用十进制 ...

  7. CodeForces 620E New Year Tree(线段树的骚操作第二弹)

    The New Year holidays are over, but Resha doesn't want to throw away the New Year tree. He invited h ...

  8. CodeForces 620E:New Year Tree(dfs序+线段树)

    E. New Year Treetime limit per test3 secondsmemory limit per test256 megabytesinputstandard inputout ...

  9. Codeforces 620E New Year Tree(线段树+位运算)

    题目链接 New Year Tree 考虑到$ck <= 60$,那么用位运算统计颜色种数 对于每个点,重新标号并算出他对应的进和出的时间,然后区间更新+查询. 用线段树来维护. #includ ...

随机推荐

  1. 【Scrapy】Selectors

    Constructing selectors For convenience,response objects exposes a selector on .selector attribute,it ...

  2. Office EXCEL 如何设置最大行高

    对于单个单元格行来说,行高必须在0-409之间   但是如果合并了两个单元格,则行高就扩展了一倍,不止409,而是两倍的409.

  3. hdu 3853(数学期望入门)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3853 LOOPS Time Limit: 15000/5000 MS (Java/Others)    ...

  4. 解决UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 12: ordinal not in range(128)的编码问题

    当我在运行一个基于scrapy的爬虫时出现UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 12: ordina ...

  5. C++11,控制台输出的一段小程序。

    #include <iostream> // std::cout, std::boolalpha, std::noboolalpha int main () { bool b = true ...

  6. sshclientCRT连接linux使用技巧

    设置仿真和回滚缓冲区 字体外观设置 日志文件设置 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fi ...

  7. 杭电 1150 moving tables

    http://acm.hdu.edu.cn/showproblem.php? pid=1050 Moving Tables Time Limit: 2000/1000 MS (Java/Others) ...

  8. [IT学习]跟阿铭学linux(第3版)

    1.安装Linux在虚拟化平台上 Windows Vmware Workstation,需要在本机上打开CPU对虚拟化的支持.Virtualization Cent OS7 已成功安装. 2.http ...

  9. Why Do Microservices Need an API Gateway?

    Why Do Microservices Need an API Gateway? - DZone Integration https://dzone.com/articles/why-do-micr ...

  10. 临时表 数据在 内存 转移时间 将160秒的创建临时表时间放入定时任务 不到1秒的求和时间 hadoop 引入Hadoop 分布式计算

    SELECT SUM(pv) as pv_t  FROM 行 112247817表类型 InnoDB自动递增值 1082428327行格式  Compact索引长度 8.60 GB (9,235,93 ...