题目链接 Tree Requests

 1 #include <bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 #define rep(i, a, b)    for (int i(a); i <= (b); ++i)
 6
 7 typedef long long LL;
 8
 9 const int N = 500010;
10 const int A = 31;
11
12 int cntf[N], sz[N], h[N];
13 vector <int> v[N];
14 vector <pair<int, int> > query[N];
15
16 char s[N];
17 bool skip[N], cnt[N][A], ans[N];
18 int n, m, x, y;
19
20 void getsz(int x, int dep){
21         sz[x] = 1; h[x] = dep;
22         for (auto u : v[x]){
23             getsz(u, dep + 1);
24             sz[x] += sz[u];
25         }
26 }
27
28 void add(int x, int val){
29     cntf[h[x]] -= cnt[h[x]][s[x] - 'a'];
30     cnt[h[x]][s[x] - 'a'] ^= 1;
31     cntf[h[x]] += cnt[h[x]][s[x] - 'a'];
32
33     for (auto u : v[x]) if (!skip[u]) add(u, val);
34 }
35
36
37 void dfs(int x, bool keep){
38         int mx = 0, p;
39         for (auto u : v[x]){
40                 if (sz[u] > mx){
41                         mx = sz[u];
42                         p = u;
43                 }
44         }
45
46         for (auto u : v[x]) if (u != p) dfs(u, 0);
47         if (mx) skip[p] = 1, dfs(p, 1);
48
49         add(x, 1);
50         for (auto q : query[x]){
51                 ans[q.second] = cntf[q.first] <= 1;
52         }
53
54         if (mx) skip[p] = 0;
55         if (!keep) add(x, -1);
56 }
57
58 int main(){
59
60     scanf("%d%d", &n, &m);
61     rep(i, 2, n){
62         scanf("%d", &x);
63         v[x].push_back(i);
64     }
65
66     scanf("%s", s + 1);
67
68     getsz(1, 1);
69
70     rep(i, 1, m){
71         scanf("%d%d", &x, &y);
72         query[x].push_back({y, i});
73     }
74
75     memset(ans, 0, sizeof ans);
76     dfs(1, 0);
77     rep(i, 1, m) puts(ans[i] ? "Yes" : "No");
78
79     return 0;
80 }

转载于:https://www.cnblogs.com/cxhscst2/p/6798819.html

Codeforces 570D Tree Requests(树上启发式合并)相关推荐

  1. CodeForces - 570D Tree Requests(树上启发式合并)

    题目链接:点击查看 题目大意:给定一个以1为根的n个节点的树,每个点上有一个字母(a−z),每个点的深度定义为该节点到1号节点路径上的点数,每次询问a,b查询以a为根的子树内深度为b的节点上的字母重新 ...

  2. 树上启发式合并问题 ---- 2019icpc南昌 K. Tree (树上启发式合并 + 动态开点线段树)

    题目链接 题目大意: 就是给你一颗树,每个点有个权值viv_ivi​,问你有多少对(x,y)(x,y)(x,y)满足: xxx不是yyy的祖先 yyy也不是xxx的祖先 xxx和yyy的距离不超过kk ...

  3. 2019 ICPC 南昌 K. Tree(树上启发式合并,平衡树 treap)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://nanti.jisuanke.com/t/42586 Problem 给定一 ...

  4. CodeForces - 600E Lomsat gelral(树上启发式合并)

    题目链接:点击查看 题目大意:给出一棵树,每个节点都有一个编号代表一种颜色,现在对于每个子树求出现最多的颜色的编号之和 题目分析:因为n给到了1e5,看完这个题第一反应就是暴力n*n,但显然是会超时的 ...

  5. Codeforces 600E Lomsat gelral 树上启发式合并,线段树合并.

    文章目录 题意 题解 update:洛谷上已经可交此题. 题意 给一棵1为根的树,每个点有个颜色,求每一个点的子树里出现最多的颜色的和. 题解 我们用两组nnn个mapcnt和summap\ cnt和 ...

  6. 树上启发式合并问题 ---- D. Tree Requests [状态压缩+树上启发式合并]

    题目链接 题目大意: 就是给你一颗树,树上每个点都有一个小写字母,现在给你m∈[1,5e5]m\in [1,5e5]m∈[1,5e5]次询问,每次询问给你一个u,和deep,问你在u这课子树中,距离1 ...

  7. CodeForces - 375D Tree and Queries(树上启发式合并)

    题目链接:点击查看 题目大意:给出一棵有根树,每个节点都有一个编号代表颜色,现在给出m个询问,每个询问的形式为u k,需要回答以u为根节点的子树中,数量超过k的颜色有多少种 题目分析:树上启发式合并模 ...

  8. [dsu on tree]树上启发式合并总结(算法思想及模板附例题练习)

    文章目录 前言 树上启发式合并 引入 算法思想 时间复杂度 模板 练习 例题:CF600E Lomsat gelral solution code CF208E Blood Cousins solut ...

  9. 中石油训练赛 - Russian Dolls on the Christmas Tree(树上启发式合并/主席树)

    题目链接:点击查看 题目大意:给出一棵 n 个节点的树,以点 1 为根,现在对于每个节点作为根的子树求解:子树中有多少个编号不相交的连续子段,如:1 2 4 5 7,共有三个连续的段,分别为 [ 1 ...

最新文章

  1. web.py做图片上传网页
  2. id int primary key auto_increment是什么意思
  3. xtrabackup mysql 5.6_percona-xtrabackup工具实现mysql5.6.34的主从同步复制
  4. Java开发环境!为什么MySQL不推荐使用uuid作为主键
  5. 前端学习(1559):ng-classt隔行变色
  6. collections系列
  7. java全局机制,java实现全局异常机制
  8. 利用xsl和xml转html没有内容_HTML文档元素的属性介绍
  9. HDU1591 Encoded Love-letter【密码】
  10. MATLAB怎么做出三叶玫瑰线,matlab复习题
  11. poi导出如何设定宽度_POI导出excel列宽自适应
  12. 如何制作个人网站(如何搭建个人博客)
  13. 《数字货币与人民币国际化》读书笔记1
  14. 下载测试视频网站分享
  15. 【Unity3D日常开发】Unity中的资源加载与文件路径
  16. 华为运营商级路由器配置示例 | 配置OptionB方式跨域BGP VPLS示例(ASBR兼做PE)
  17. U盘在别人电脑上正常显示,插在自己电脑读不出来(只显示CD驱动器)
  18. 前端开发vue技术栈程序员的vs code插件分享
  19. 成就系统和任务系统的设计
  20. 华为怎么分屏操作技巧_第五人格魔术师怎么操作 求生者魔术师操作技巧

热门文章

  1. scsi协议_存储协议有哪些类型?常见存储协议分析
  2. python解析html xml最好的模块_python中处理xml的模块哪个好?
  3. 无线网卡dns服务器没有响应,无线网卡上不去网怎么设置dns
  4. Java笔记-DH密钥交换获取密钥及AES加解密
  5. Java笔记-Spring Boot JDBC连接Oracle数据库
  6. canvas笔记-文本(fillText)旋转(rotate)
  7. Java笔记-解决Required long parameter 'XXX' is not present
  8. Linux学习笔记-线程的自然终止
  9. mac mysql ngram_MySQL ngram
  10. php公司面试反问,php面试坑集锦