New Year Tree CodeForces -620E
这个题有一个技巧:把颜色压到一个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的更多相关文章
- Z - New Year Tree CodeForces - 620E 线段树 区间种类 bitset
Z - New Year Tree CodeForces - 620E 这个题目还没有写,先想想思路,我觉得这个题目应该可以用bitset, 首先这个肯定是用dfs序把这个树转化成线段树,也就是二叉树 ...
- Vasya and a Tree CodeForces - 1076E(线段树+dfs)
I - Vasya and a Tree CodeForces - 1076E 其实参考完别人的思路,写完程序交上去,还是没理解啥意思..昨晚再仔细想了想.终于弄明白了(有可能不对 题意是有一棵树n个 ...
- Distance in Tree CodeForces - 161D
Distance in Tree CodeForces - 161D 题意:给一棵n个结点的树,任意两点之间的距离为1,现在有点u.v,且u与v的最短距离为k,求这样的点对(u,v)的个数((u,v) ...
- Water Tree CodeForces 343D 树链剖分+线段树
Water Tree CodeForces 343D 树链剖分+线段树 题意 给定一棵n个n-1条边的树,起初所有节点权值为0. 然后m个操作, 1 x:把x为根的子树的点的权值修改为1: 2 x:把 ...
- Codeforces 620E New Year Tree(DFS序 + 线段树)
题目大概说给一棵树,树上结点都有颜色(1到60),进行下面两个操作:把某结点为根的子树染成某一颜色.询问某结点为根的子树有多少种颜色. 子树,显然DFS序,把子树结点映射到连续的区间.而注意到颜色60 ...
- CodeForces 620E New Year Tree
线段树+位运算 首先对树进行DFS,写出DFS序列,记录下每一个节点控制的区间范围.然后就是区间更新和区间查询了. 某段区间的颜色种类可以用位运算来表示,方便计算. 如果仅有第i种颜色,那么就用十进制 ...
- 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 ...
- CodeForces 620E:New Year Tree(dfs序+线段树)
E. New Year Treetime limit per test3 secondsmemory limit per test256 megabytesinputstandard inputout ...
- Codeforces 620E New Year Tree(线段树+位运算)
题目链接 New Year Tree 考虑到$ck <= 60$,那么用位运算统计颜色种数 对于每个点,重新标号并算出他对应的进和出的时间,然后区间更新+查询. 用线段树来维护. #includ ...
随机推荐
- Robot Framework操作
Robot Framework 介绍 RobotFramework是一款基于python的开源自动化测试框架,遵守Apache License 2.0协议,在此协议下所有人都可以免费开发和使用.因为R ...
- Android进阶图片处理之三级缓存方案
图片的三级缓存 一.概述 一開始在学习Android的时候.处理图片的时候,每次获取图片都是直接从网络上面载入图片. 可是在开发项目的过程中,每次点击进入app里面,图片都要慢慢的再一次从网络上面载入 ...
- leetCode(26):Unique Binary Search Trees
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- Redhat Linux 下安装Oracle 11g R2
能够下载:http://download.csdn.net/detail/ykh554541184/8086647文档方便查阅 官方文档:http://docs.oracle.com/cd/E1188 ...
- 2016/3/18 ①PHP基础 ② PHP函数 ③其他函数(随机数、关于日期) ④正则表达式 ⑤字符串处理
一.PHP基础 1,标记和注释 ①<?php?> ②单行注释// 多行注释/** */2, 输出语句 ①echo输出 echo可以输出多个字符串,用逗号隔开. ②print输出 pr ...
- Linux 下的编辑/编译器
linux 首先有两个重量级的文本编辑器:vim 和 emacs 此外有如下三种比较好的开放环境: 1.Anjuta Anjuta DevStudio 的官方地址:http://anjuta.sour ...
- 借助ltp 逐步程序化实现规则库 文本生成引擎基于规则库和业务词库 去生成文本
[哪个地方做什么的哪家靠谱?地名词库行业.业务词库]苏州做网络推广的公司哪家靠谱?苏州镭射机维修哪家最专业?昆山做账的公司哪家比较好广州称重灌装机生产厂家哪家口碑比较好 [含有专家知识]郑州律师哪个好 ...
- 在Android用ZXing.jar识别二维码的精简版(简化了配置和代码)
近期公司做了一款OTP令牌激活的产品,因为之前激活手机令牌须要输入非常多的激活信息才干进行激活. 经过一段使用后,发现易用性不是非常强,考虑假设添加二维码的的扫码功能岂不是大大添加了易 ...
- Hibernate状态转换
瞬时态: 对象有new关键字创建,此时还未与Session关联. 持久态: 在执行session.save(bean)或saveOrUpdate()操作后,bean纳入Session的管理范围,这时b ...
- mongo11---Access control is not enabled for the database
今天使用MongoDB时遇到了一些问题 建立数据库连接时出现了warnings 出现这个警告的原因是新版本的MongDB为了让我们创建一个安全的数据库 必须要进行验证 后来在外网找到了答案 解决方案如 ...