借用学长的活:60种颜色是突破口(我咋不知道QAQ)

好像这几道都是线段树+dfs序??于是你可以把60种颜色压进一个long long 里,然后向上合并的时候与一下(太妙了~)

所以记得开long long (又调了一个半小时。。。打代码只花了20分钟???)

#include<cstdio>
#include<iostream>
#define ll long long
#define R register int
#define ls (tr<<1)
#define rs (tr<<1|1)
const int N=;
using namespace std;
inline ll g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
int n,m,cnt,num;
int vr[N<<],nxt[N<<],fir[N],dfn[N],sz[N],rw[N],w[N];
ll sum[N<<]; bool tg[N<<];
inline void add(int u,int v) {vr[++cnt]=v,nxt[cnt]=fir[u],fir[u]=cnt;}
inline ll lbt(ll x) {return x&-x;}
inline int ppc(ll x) {R ret=; while(x) x-=lbt(x),++ret; return ret;}
void dfs(int u) { sz[u]=,dfn[u]=++num,rw[num]=u;
for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
if(dfn[v]) continue;
dfs(v); sz[u]+=sz[v];
}
}
inline void build(int tr,int l,int r) {
if(l==r) {sum[tr]=1ll<<w[rw[l]]; return; } R md=(l+r)>>;
build(ls,l,md),build(rs,md+,r); sum[tr]=sum[ls]|sum[rs];
}
inline void spread(int tr) {
if(tg[tr]) tg[tr]=false,sum[ls]=sum[rs]=sum[tr],tg[ls]=tg[rs]=true;
}
inline void update(int tr,int l,int r,int LL,int RR,int inc) {
if(LL<=l&&r<=RR) {sum[tr]=1ll<<inc; tg[tr]=true; return ;} spread(tr);
R md=(l+r)>>; if(LL<=md) update(ls,l,md,LL,RR,inc); if(RR>md) update(rs,md+,r,LL,RR,inc);
sum[tr]=sum[ls]|sum[rs];
}
inline ll query(int tr,int l,int r,int LL,int RR) {
if(LL<=l&&r<=RR) return sum[tr]; spread(tr); R md=(l+r)>>,ret=;
if(LL<=md) ret|=query(ls,l,md,LL,RR); if(RR>md) ret|=query(rs,md+,r,LL,RR);
return ret;
}
signed main() {
n=g(),m=g(); for(R i=;i<=n;++i) w[i]=g();
for(R i=,u,v;i<=n;++i) u=g(),v=g(),add(u,v),add(v,u);
dfs(); build(,,n);
for(R i=;i<=m;++i) {
R k=g(),u=g(),inc;
if(k&) inc=g(),update(,,n,dfn[u],dfn[u]+sz[u]-,inc);
else printf("%d\n",ppc(query(,,n,dfn[u],dfn[u]+sz[u]-)));
}

2019.04.19

CF620E New Year Tree 状压+线段树(+dfs序?)的更多相关文章

  1. S - Query on a tree HDU - 3804 线段树+dfs序

    S - Query on a tree HDU - 3804   离散化+权值线段树 题目大意:给你一棵树,让你求这棵树上询问的点到根节点直接最大小于等于val的长度. 这个题目和之前写的那个给你一棵 ...

  2. POJ3321[苹果树] 树状数组/线段树 + dfs序

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions:39452   Accepted: 11694 Descr ...

  3. Tsinsen A1505. 树(张闻涛) 倍增LCA,可持久化线段树,DFS序

    题目:http://www.tsinsen.com/A1505 A1505. 树(张闻涛) 时间限制:1.0s   内存限制:512.0MB    总提交次数:196   AC次数:65   平均分: ...

  4. BZOJ_3252_攻略_线段树+dfs序

    BZOJ_3252_攻略_线段树+dfs序 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏< ...

  5. 【XSY2534】【BZOJ4817】树点涂色 LCT 倍增 线段树 dfs序

    题目大意 ​ Bob有一棵\(n\)个点的有根树,其中\(1\)号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜 ...

  6. 【bzoj4817】树点涂色 LCT+线段树+dfs序

    Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...

  7. HDU 5692 线段树+dfs序

    Snacks Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  8. 线段树+Dfs序【CF620E】New Year Tree

    Description 你有一棵以1为根的有根树,有n个点,每个节点初始有一个颜色c[i]. 有两种操作: 1 v c 将以v为根的子树中所有点颜色更改为c 2 v 查询以v为根的子树中的节点有多少种 ...

  9. P1558 色板游戏 状压线段树

    P1558 色板游戏 状压线段树 题面 洛谷P1558 每次不同颜色覆盖一段区间,每次询问一段区间有多少种颜色 因为颜色数\(T\)很小,使用二进制表示状态当前区间有那些颜色,二进制第\(i\)位表示 ...

随机推荐

  1. zabbix simple check

    摘自: http://www.ttlsa.com/zabbix/zabbix-simple-checks/ 1. 开始 Simple checks通常用来检查远程未安装代理或者客户端的服务 使用sim ...

  2. 杂草丛生HTML5网站模板

    杂草丛生HTML5个人网站模板是一款野草到处生长的HTML5网站模板下载. 模板地址:http://www.huiyi8.com/sc/8780.html

  3. linux网络编程 inet_aton(); inet_aton; inet_addr;

    . inet_aton()是一个改进的方法来将一个字符串IP地址转换为一个32位的网络序列IP地址. . inet_ntoa() 本函数将一个用in参数所表示的Internet地址结构转换成以“.” ...

  4. bzoj 4514: 数字配对

    题目大意 自己看 题解 我们打表观察规律发现一定能构成一张二分图 也就是不存在奇环 所以我们一般保证费用非负的最大流即可. #include <cstdio> #include <c ...

  5. [HAOI 2011] Problem A

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2298 [算法] 考虑用总人数 - 最多人说真话 显然 , 对于每个人 , 如果他说的 ...

  6. PowerShell自动部署网站—(1)、安装IIS[添加角色和角色服务]

    #------添加角色/角色服务------ Import-Module servermanager $features = get-windowsfeature Net-*,Telnet-*,Web ...

  7. vijos:P1155集合位置(次短路)

    描述 每次有大的活动,大家都要在一起“聚一聚”,不管是去好乐迪,还是避风塘,或者汤姆熊,大家都要玩的痛快.还记得心语和花儿在跳舞机上的激情与释放,还记得草草的投篮技艺是如此的高超,还记得狗狗的枪法永远 ...

  8. S5pv210 HDMI 接口在 Linux 3.0.8 驱动框架解析

    作者:liukun321 咕唧咕唧 日期:2014.1.18 转载请标明作者.出处:http://blog.csdn.net/liukun321/article/details/18452663 本文 ...

  9. MVC之Control中使用AOP

    原文转载自http://www.cnblogs.com/iamlilinfeng/archive/2013/03/02/2940162.html 本文目标 一.能够使用Control中的AOP实现非业 ...

  10. 二维数组是二级指针pointer to pointer!

    二维数组居然是个类似于二级指针(pointer to pointer)的东西,十分震惊! #include <stdio.h> int main() { ][]={{,,,},{,,,}, ...