2019.03.09 codeforces620E. New Year Tree(线段树+状态压缩)
传送门
题意:给一棵带颜色的树,可以给子树染色或者问子树里有几种不同的颜色,颜色值不超过606060。
思路:颜色值很小,因此状压一个区间里的颜色用线段树取并集即可。
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
typedef long long ll;
const int N=4e5+5;
vector<int>e[N];
int n,m,tot=0,in[N],out[N],pred[N],col[N];
ll bin[N];
void dfs(int p,int fa){
pred[in[p]=++tot]=p;
for(ri i=0,v;i<e[p].size();++i)if((v=e[p][i])^fa)dfs(v,p);
out[p]=tot;
}
namespace SGT{
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (l+r>>1)
ll sta[N<<2],cov[N<<2];
inline void pushup(int p){sta[p]=sta[lc]|sta[rc];}
inline void pushnow(int p,ll v){sta[p]=cov[p]=v;}
inline void pushdown(int p){if(cov[p])pushnow(lc,cov[p]),pushnow(rc,cov[p]),cov[p]=0;}
inline void build(int p,int l,int r){
cov[p]=0;
if(l==r){sta[p]=bin[col[pred[l]]];return;}
build(lc,l,mid),build(rc,mid+1,r),pushup(p);
}
inline void update(int p,int l,int r,int ql,int qr,ll v){
if(ql<=l&&r<=qr)return pushnow(p,v);
pushdown(p);
if(qr<=mid)update(lc,l,mid,ql,qr,v);
else if(ql>mid)update(rc,mid+1,r,ql,qr,v);
else update(lc,l,mid,ql,mid,v),update(rc,mid+1,r,mid+1,qr,v);
pushup(p);
}
inline ll query(int p,int l,int r,int ql,int qr){
if(ql<=l&&r<=qr)return sta[p];
pushdown(p);
if(qr<=mid)return query(lc,l,mid,ql,qr);
if(ql>mid)return query(rc,mid+1,r,ql,qr);
return query(lc,l,mid,ql,mid)|query(rc,mid+1,r,mid+1,qr);
}
#undef lc
#undef rc
#undef mid
}
inline ll lowbit(const ll&x){return x&-x;}
inline int count_bit(ll x){
int ret=0;
while(x)x^=lowbit(x),++ret;
return ret;
}
int main(){
bin[0]=1;
for(ri i=1;i<=60;++i)bin[i]=bin[i-1]<<1;
n=read(),m=read();
for(ri i=1;i<=n;++i)col[i]=read();
for(ri i=1,u,v;i<n;++i)u=read(),v=read(),e[u].push_back(v),e[v].push_back(u);
dfs(1,0),SGT::build(1,1,n);
for(ri op,v;m;--m){
op=read();
switch(op){
case 1:v=read(),SGT::update(1,1,n,in[v],out[v],bin[read()]);break;
case 2:v=read(),cout<<count_bit(SGT::query(1,1,n,in[v],out[v]))<<'\n';break;
}
}
return 0;
}
2019.03.09 codeforces620E. New Year Tree(线段树+状态压缩)的更多相关文章
- 2019.03.09 codeforces833B. The Bakery(线段树优化dp)
传送门 线段树优化dpdpdp入门题. 要求把nnn个数分成kkk段,每段价值为里面不相同的数的个数,求所有段的价值之和最大值.n≤35000,k≤50n\le35000,k\le50n≤35000, ...
- CodeForces 620E"New Year Tree"(DFS序+线段树+状态压缩)
传送门 •题意 给你一颗 n 个节点的树,每个节点被染上了颜色: 有 m 次操作,每次操作的类型有两种 1 v c : 将以 v 为根的子树的结点全部涂成 c 2 v : 询问以 v 为根的子树的结点 ...
- CF620E New Year Tree(树形+dfs序+线段树+状态压缩)
题目链接 题目大意 \(~~\)给出一棵 nn 个节点的树,根节点为 11.每个节点上有一种颜色 c\(_{i}\) 和m 次操作.操作有两种: \(~~~~\) 1. 1\(~\)u\(~\)c:将 ...
- POJ P2777 Count Color——线段树状态压缩
Description Chosen Problem Solving and Program design as an optional course, you are required to sol ...
- Luogu P1558 色板游戏【线段树/状态压缩】By cellur925
题目传送门 今天非常想再看一遍霸王别姬想不进去题于是开始刷数据结构 注意到至多只有\(30\)种颜色,啊啊啊啊我一开始竟然想的不是状态压缩而是在线段树中存一个30大小的数组,这样每次更新的时候暴力循环 ...
- HDU 6183 Color it cdq分治 + 线段树 + 状态压缩
Color it Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Pro ...
- 2021.12.09 [HEOI2016/TJOI2016]排序(线段树+二分,把一个序列转换为01串)
2021.12.09 [HEOI2016/TJOI2016]排序(线段树+二分,把一个序列转换为01串) https://www.luogu.com.cn/problem/P2824 题意: 在 20 ...
- 2019.03.09 bzoj4999: This Problem Is Too Simple!(树链剖分+线段树动态开点)
传送门 题意:给一颗树,每个节点有个初始值,要求支持将i节点的值改为x或询问i节点到j节点的路径上有多少个值为x的节点. 思路: 考虑对每种颜色动态开点,然后用树剖+线段树维护就完了. 代码: #in ...
- 2019.03.09 bzoj4491: 我也不知道题目名字是什么(线段树)
传送门 题意:给定一个序列A[i],每次询问l,r,求[l,r]内最长子串,使得该子串为不上升子串或不下降子串. 思路: 注意要求的是子串而不是子序列!!! 然后直接用线段树维护最大子段和的方式合并一 ...
随机推荐
- 使用pycharm 出现 interpreter field is empty 完美解决方法(转载 记录)
使用pycharm 出现 interpreter field is empty 主要是因为你的电脑没有正确安装python或者安装python出错,重新下载安装覆盖就行 下载安装包:从Python的官 ...
- centos7编译安装nginx
一.安装依赖包 yum install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre-devel 二 ...
- css入门第一天
一丶Web标准Web标准不是某一个标准,而是一系列标准的集合,内容与结构与表现形式的分离网页主要有四个部分组成:内容(content),结构(structure), 表现(presentation)和 ...
- Python学习—数据库篇之SQL语句
一.数据库级别 1.显示数据库 show databases; 默认数据库: mysql - 用户权限相关数据 test - 用于用户测试数据 information_schema - MySQL本身 ...
- fuchsia 内核
1 内核zircon 是c++写的,system call是重写的,不兼容POSIX https://fuchsia.googlesource.com/zircon/+/HEAD/docs/conce ...
- 20175126《Java程序设计》第九周学习总结
# 20175126 2016-2017-2 <Java程序设计>第九周学习总结 ## 教材学习内容总结 - 本周学习方式主要为手动敲代码并理解内容学习. - 学习内容为教材第十一章,本章 ...
- hdu4622(hash解法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4622 Now you are back,and have a task to do:Given you ...
- 如何看iOS崩溃日志
重点:Triggered by Thread这句话后边的线程号,快速定位问题出现在那个线程,是否是你的锅:Triggered by Thread所指的线程表示导致异常.崩溃的线程 下边内容转自简书 简 ...
- java_25.1字节转为字符OutputStreamWriter
public class Demo { public static void main(String[] args){ try { FileOutputStream fos = new FileOut ...
- mysql7.5.x删除重新安装
删除: cmd管理员运行,进入D:\devs\MySQL\mysql-5.7.25-winx64\bin目录下: 输入命令:sc delete mysql 删除data目录下的所有文件 安装: 创建m ...