[CSP-S 2019]括号树

源代码:

  1. #include<cstdio>
  2. #include<cctype>
  3. #include<vector>
  4. inline int getint() {
  5. register char ch;
  6. while(!isdigit(ch=getchar()));
  7. register int x=ch^'0';
  8. while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
  9. return x;
  10. }
  11. inline bool isbracket(const char &ch) {
  12. return ch=='('||ch==')';
  13. }
  14. inline bool getbracket() {
  15. register char ch;
  16. while(!isbracket(ch=getchar()));
  17. return ch==')';
  18. }
  19. typedef long long int64;
  20. const int N=5e5+1;
  21. std::vector<int> e[N];
  22. inline void add_edge(const int &u,const int &v) {
  23. e[u].push_back(v);
  24. }
  25. bool c[N];
  26. int stk[N],par[N],dep[N],top[N];
  27. int64 f[N];
  28. void dfs(const int &x) {
  29. dep[x]=dep[par[x]]+1;
  30. stk[dep[x]]=x;
  31. //f[x]: end with current char
  32. if(x!=1&&c[x]&&!c[par[x]]) {//"..." + "()"
  33. f[x]=1+f[par[par[x]]];
  34. top[x]=top[par[par[x]]]?:par[x];
  35. }
  36. if(x!=1&&c[x]&&c[par[x]]) {//"(" + "(...)" + ")"
  37. if(top[par[x]]>1&&!c[par[top[par[x]]]]) {
  38. f[x]=1+f[par[par[top[par[x]]]]];
  39. top[x]=top[par[par[top[par[x]]]]]?:par[top[par[x]]];
  40. }
  41. }
  42. for(unsigned i=0;i<e[x].size();i++) {
  43. dfs(e[x][i]);
  44. }
  45. }
  46. int main() {
  47. freopen("brackets.in","r",stdin);
  48. freopen("brackets.out","w",stdout);
  49. const int n=getint();
  50. for(register int i=1;i<=n;i++) {
  51. c[i]=getbracket();
  52. }
  53. for(register int i=2;i<=n;i++) {
  54. par[i]=getint();
  55. add_edge(par[i],i);
  56. }
  57. dfs(1);
  58. for(register int i=2;i<=n;i++) {
  59. f[i]+=f[par[i]];
  60. }
  61. int64 ans=0;
  62. for(register int i=1;i<=n;i++) {
  63. ans^=f[i]*i;
  64. }
  65. printf("%lld\n",ans);
  66. return 0;
  67. }

[CSP-S 2019]括号树的更多相关文章

  1. 题解【洛谷P5658】[CSP-S 2019]括号树

    题面 一道简单的栈与\(\text{DP}\)的结合. 首先介绍一下序列上的括号匹配问题,也就是此题在序列上的做法: 设 \(dp_i\) 表示以 \(i\) 结尾的合法的括号序列个数, \(ss_i ...

  2. 上午小测3 T1 括号序列 && luogu P5658 [CSP/S 2019 D1T2] 括号树 题解

    前 言: 一直很想写这道括号树..毕竟是在去年折磨了我4个小时的题.... 上午小测3 T1 括号序列 前言: 原来这题是个dp啊...这几天出了好几道dp,我都没看出来,我竟然折磨菜. 考试的时候先 ...

  3. P5658 括号树

    P5658 括号树 题解 太菜了啥都不会写只能水5分数据 啥都不会写只能翻题解  题解大大我错了 我们手动找一下规律 我们设 w[ i ] 为从根节点到结点 i 对答案的贡献,也就是走到结点 i ,合 ...

  4. CSP2019 括号树

    Description: 给定括号树,每个节点都是 ( 或 ) ,定义节点的权值为根到该节点的简单路径所构成的括号序列中不同合法子串的个数(子串需要连续,子串所在的位置不同即为不同.)与节点编号的乘积 ...

  5. 2021.08.09 P5658 括号树(树形结构)

    2021.08.09 P5658 括号树(树形结构) [P5658 CSP-S2019] 括号树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 太长,在链接中. 分析及代码 ...

  6. 括号树 noip(csp??) 2019 洛谷 P5658

    洛谷AC通道 本题,题目长,但是实际想起来十分简单. 首先,对于树上的每一个后括号,我们很容易知道,他的贡献值等于上一个后括号的贡献值 + 1.(当然,前提是要有人跟他匹配,毕竟题目中要求了,是不同的 ...

  7. 【CSP-S 2019】【洛谷P5658】括号树【dfs】【二分】

    题目: 题目链接:https://www.luogu.org/problem/P5658?contestId=24103 本题中合法括号串的定义如下: () 是合法括号串. 如果 A 是合法括号串,则 ...

  8. CSP-S 2019 D1T2 括号树

    题目链接:[https://www.luogu.com.cn/problem/P5658] 思路: 这道题不难.(为什么我在考场上一点思路也没有??) 假设我们已经处理到树上的节点u(假设1为根节点) ...

  9. 「CSP-S 2019」括号树

    [题目描述] 传送门 [题解] 是时候讨论一下我在考场上是怎么将这道题写挂的了 初看这道题毫无思路,先看看部分分吧 一条链的情况?设k[i]表示前i个括号的方案数 显然\(k[i]=k[i-1]+\) ...

随机推荐

  1. CF933E A Preponderant Reunion DP

    传送门 题解搬运工 设原问题为问题A.每一次减少\(\min\{p_i , p_{i+1}\}\)难以处理,我们考虑将限制变得宽松一些:每一次可以减少\([1,\min\{p_i , p_{i+1}\ ...

  2. stone2 [期望]

    也许更好的阅读体验 \(\mathcal{Description}\) 有 \(n\) 堆石子,依次编号为 \(1, 2,\ldots , n\),其中第 \(i\) 堆有 \(a_i\) 颗石子 你 ...

  3. java之mybatis之helloworld

    1. MyBatis 是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架. MyBatis几乎消除了所有的 JDBC 代码,也基本不需要手工去设置参数和获取检索结果. MyBatis几乎能够 ...

  4. 【i.MX6UL/i.MX6ULL开发常见问题】单独编译内核,uboot生成很多文件,具体用哪一个?

    [i.MX6UL/i.MX6ULL开发常见问题]2.3单独编译内核,uboot生成很多文件,具体用哪一个? 答:内核编译出来的文件是~/MYiR-imx-Linux/arch/arm/boot/目录下 ...

  5. SVN 报错 Can't install '*' from pristine store, because no checksum is recorded for this file

    SVN同步.cleanup都会出现下面的提示: svn: E155017: Can't install '*' from pristine store, because no checksum is ...

  6. 【RAC】 RAC For W2K8R2 安装--总体规划 (一)

    [RAC] RAC For W2K8R2 安装--总体规划 (一) 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一 ...

  7. Mac 环境变量的配置

    1.打开终端. 2.输入命令:sudo vi /etc/paths,然后enter,输入电脑开机密码,继续enter(这个地方的密码不会显示,只要你输入完了就按enter). 3.此时vi编辑器打开了 ...

  8. 关于git报 warning: LF will be replaced by CRLF in README.md.的警告的解决办法

    在使用git把代码上传至仓库时,会有下面这种警告: 虽然说是警告,但是看着真的很碍眼啊,特别是有强迫症的人就更难受了. 输入这一行命令就可以完美解决了 git config core.autocrlf ...

  9. TensorFlow 2 快速教程,初学者入门必备

    TensorFlow 2 简介 TensorFlow 是由谷歌在 2015 年 11 月发布的深度学习开源工具,我们可以用它来快速构建深度神经网络,并训练深度学习模型.运用 TensorFlow 及其 ...

  10. 一套不错的docker lnmp

    github地址:https://github.com/yeszao/dnmp 镜像基于linux alpine 内存占用小 安装常用软件采用apk命令