CF620E】的更多相关文章

luogu链接 题目大意: 有一个节点有颜色的树 操作1.修改子树的颜色 操作2.查询子树颜色的种类 注意,颜色种类小于60种 只有子树的操作,dfs序当然是最好的选择 dfs序列是什么,懒得讲了,自己搜吧 然后开两个数组,begin_和end_记录节点子树在dfs序数组中的开头和结尾 begin,end居然在cf是关键字,还好不是ccf,要不就死了 区间修改一个数,区间查询,线段树的傻逼操作 OK #include <iostream> #include <cstdio> #in…
题目大意:有一棵以$1$为根的有根树,有$n$个点,每个节点初始有颜色$c_i$.有两种操作: $1 v c:$将以$v$为根的子树中所有点颜色更改为$c$ $2 v:$ 查询以$v$为根的子树中的节点有多少种不同的颜色 题解:只有$60$种颜色,可以考虑用一个$long\;long$把颜色状压,用$dfs$序把树上问题转化为线段问题就行了 卡点:各种该开$long\;long$开$int$ C++ Code: #include <cstdio> #define maxn 400010 usi…
Description 你有一棵以1为根的有根树,有n个点,每个节点初始有一个颜色c[i]. 有两种操作: 1 v c 将以v为根的子树中所有点颜色更改为c 2 v 查询以v为根的子树中的节点有多少种不同的颜色 Input 第一行,两个整数\(n,m\),分别代表有\(n\)个节点和\(m\)个操作. 第二行,共\(n\)个整数,代表每个节点的初始颜色\(c[i]\) 接下来\(n-1\)行,描述一条边. 接下来\(m\)行,代表每个操作. Output 对于每个询问操作,输出一行. 刚开始以为…
Description At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at him. A lot of important things were lost, in particular the favorite sequence of Picks. Fortunately, Picks remembers how to repair the seq…
借用学长的活: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) #defin…
题解 弱智题,二进制表示位数.合并时用| 就是被1<<x卡了好久. 要写成1ll<<x才行 #include<iostream> #include<cstring> #include<cmath> #include<cstdio> #include<algorithm> using namespace std; ; int cnt,head[N]; int id[N],size[N],cao[N],tot; int n,m…
线段树维护 dfs 序是显然的. 暴力建 60 个线段树太慢,于是用 bitset 优化就好了 ~ code: #include <bits/stdc++.h> #define M 63 #define N 800005 #define lson now<<1 #define rson now<<1|1 using namespace std; inline void setIO(string s) { string in=s+".in"; stri…
New Year Tree 题目链接:http://codeforces.com/problemset/problem/620/E 数据范围:略. 题解: 转化成序列问题,发现颜色种数特别少,暴力用数组合并显然会$T$,我们用$bitset$优化合并过程即可. 代码: #include <bits/stdc++.h> #define setIO(s) freopen(s".in", "r", stdin), freopen(s".out&quo…
(题面来自luogu) 题意翻译 你有一棵以1为根的有根树,有n个点,每个节点初始有一个颜色c[i]. 有两种操作: 1 v c 将以v为根的子树中所有点颜色更改为c 2 v 查询以v为根的子树中的节点有多少种不同的颜色 翻译贡献者UID:28455 n.m <= 4e5,ci <= 60. 今天唯一听懂的一道题目,调了两个小时--因为要查询子树信息,考虑构造出dfs序之后,用线段树维护区间颜色.因为颜色只有60种,可以维护在节点上维护bitset或者一个64位整型来压缩状态,每一位上表示以该…
有关dfs序的例题,需要有一定的位运算基础 题面 给定一个树,树上有颜色,将某一子树的颜色统一修改,求子树中颜色的数量 Solution 子树修改,子树求和,dfs序的知识(类似区间修改区间求和) 考虑到颜色的个数问题,利用位运算进行表示. 最后答案用二进制表示,\(\ 1\)表示有该种颜色,\(\ 0\)表示没有, 因此还需考虑答案\(\ 1\)的数量. dfs序问题自然用到线段树进行维护. 具体介绍一下位运算,和一些小错误 方案总数不是两个节点维护的方案数的简单相加,而是"|"(或…