这个题有一个技巧:把颜色压到一个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. 2003-07-16T01:24:32Z这是什么时间格式

    这是标准的XML Schema的"日期型数据格式”. T是代表后面跟着“时间”.Z代表0时区,或者叫UTC统一时间. 世界的每个地区都有自己的本地时间,在Internet及无线电通信时,时间 ...

  2. redux-saga 异步流

    前言 React的作用View层次的前端框架,自然少不了很多中间件(Redux Middleware)做数据处理, 而redux-saga就是其中之一,目前这个中间件在网上的资料还是比较少,估计应用的 ...

  3. cocos2d-x CCSrollView 源代码,可循环的SrollView代码

    项目须要.写一个类似于iPhone上面时钟选择的可拉动式循环选择列表,通过集成CCScrollView并更改部分代码.实现了该功能. 假设想充分了解代码,请先阅读源码分析http://blog.csd ...

  4. 说说Windows7 64bits下安装TensorFlow GPU版本会遇到的一些坑

    不多说,直接上干货! 再写博文,回顾在Windows7上安装TensorFlow-GPU的一路坑 Windows7上安装TensorFlow的GPU版本后记 欢迎大家,加入我的微信公众号:大数据躺过的 ...

  5. pat1043:输出PATest

    https://www.patest.cn/contests/pat-b-practise/1043 #include "stdio.h" int main() { int i, ...

  6. [IT学习]Python pandas 学习

    今天学习pandas来处理数据,结果用python 3.5.0的shell来调试,总是报错. 报错中包含如下字样: Traceback (most recent call last): File &q ...

  7. ios app抓包分析

    1 使用rvictl工具 这是mac下的一条命令.ios usb连mac,然后创建虚拟网络接口. 2 使用wireshark抓包 wireshark可以抓这个虚拟网络接口上的数据包.

  8. Swift入门(十)——循环引用、弱引用和无主引用

    近期看到swift里面不仅有循环引用和弱引用(weak),还加入了无主引用(unowned),于是写了一些demo,这里总结一下. 和OC一样.Swfit默认也是基于ARC进行内存管理的,因此尽管简单 ...

  9. 设置Table边框的CSS

    <!DOCTYPE html> <html> <head> <style> table, td, th { border: 1px solid blac ...

  10. 解决手淘lib-flexible.js在移动端首次加载页面页面先放大后正常问题

    例如这样 然后这样 出现这样的原因一般是   静态的,即html里有一些静态的(即非js动态添加的) 如果在页面加载完成后,页面是用js动态添加的,这个问题就不太明显, doc.addEventLis ...