洛谷AC通道

本题,题目长,但是实际想起来十分简单。

首先,对于树上的每一个后括号,我们很容易知道,他的贡献值等于上一个后括号的贡献值 + 1。(当然,前提是要有人跟他匹配,毕竟题目中要求了,是不同的子串。)

那么,如何记录是否有人跟他匹配??  也很好想。。。  用一个栈来维护(同时也方便我们记录上一个后括号所在的位置。)

那么,求总贡献值呢??  更好办了。  直接等于他爸爸 + 他自己的呗!!

结束了~~~

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define N 600010
  4. #define ll long long
  5.  
  6. inline ll read(){
  7. ll x = , s = ;
  8. char c = getchar();
  9. while(!isdigit(c)){
  10. if(c == '-')s = -;
  11. c = getchar();
  12. }
  13. while(isdigit(c)){
  14. x = (x << ) + (x << ) + (c ^ '');
  15. c = getchar();
  16. }
  17. return x * s;
  18. }
  19.  
  20. int fa[N];
  21. ll sum[N], lst[N];
  22.  
  23. struct node{
  24. int v, next;
  25. } t[N];
  26. int f[N];
  27. int a[N];
  28. char c[N];
  29.  
  30. int bian = ;
  31. inline void add(int u, int v){
  32. t[++bian] = (node){v, f[u]};
  33. f[u] = bian;
  34. return ;
  35. }
  36.  
  37. int stac[N], top = ;
  38. void dfs(int now){
  39. int temp = ;;
  40. if(c[now] == '('){
  41. stac[++top] = now;
  42. }
  43. else if(c[now] == ')'){
  44. if(top){
  45. temp = stac[top];
  46. lst[now] = lst[fa[temp]] + ;
  47. top--;
  48. }
  49. }
  50. sum[now] = sum[fa[now]] + lst[now];
  51. for(int i = f[now]; i; i = t[i].next){
  52. int v = t[i].v;
  53. dfs(v);
  54. }
  55. if(temp != ) stac[++top] = temp;
  56. else if(top) top--;
  57. return ;
  58. }
  59.  
  60. int main(){
  61. int n = read();
  62. scanf("%s", c + );
  63. for(int i = ;i <= n; i++){
  64. int x = read();
  65. add(x, i);
  66. fa[i] = x;
  67. }
  68. dfs();
  69. ll ans = ;
  70. for(ll i = ;i <= n; i++)
  71. ans ^= i * sum[i];
  72. printf("%lld\n", ans);
  73. return ;
  74. }

括号树 noip(csp??) 2019 洛谷 P5658的更多相关文章

  1. 格雷码 CSP(NOIP??)2019 洛谷 P5657

    洛谷AC通道! 多年过后,重新来看这道D1T1,20min不到AC,再回忆起当初考场三小时的抓耳挠腮,不禁感慨万千啊!! 发篇题解记录一下. 思路:直接dfs模拟即可(二进制找规律是不可能的, 这辈子 ...

  2. 【noip】跟着洛谷刷noip题2

    noip好难呀. 上一个感觉有点长了,重开一个. 36.Vigenère 密码 粘个Openjudge上的代码 #include<cstdio> #include<iostream& ...

  3. 【noip】跟着洛谷刷noip题

    传送门 1.铺地毯 d1t1 模拟 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> # ...

  4. 树链剖分模板(洛谷P3384)

    洛谷P3384 #include <bits/stdc++.h> #define DBG(x) cerr << #x << " = " < ...

  5. 线段树分治初步学习&洛谷P5227[AHOI2013]连通图

    线段树分治 其实思想说起来是比较简单的,我们把这个题里的所有操作(比如连边删边查询balabala)全部拍到一棵线段树上,然后对着整棵树dfs一下求解答案,顺便把操作做一下,回溯的时候撤销一下即可.虽 ...

  6. 李超线段树(segment[HEOI2013]-洛谷T4097)

    (neng了好久好久才糊弄懂得知识点...) 一.李超线段树 在线动态维护一个二维平面直角坐标系, 支持插入一条线段, 询问与直线x = x0相交的所有线段中,交点y的最大/小值 (若有多条线段符合条 ...

  7. 树剖模板(洛谷P3384 【模板】树链剖分)(树链剖分,树状数组,树的dfn序)

    洛谷题目传送门 仍然是一个板子. 不过蒟蒻去学了一下BIT维护区间修改区间求和,常数果真十分优秀 设数列为\(a_i\),差分数组\(d_ i=a_ i-a_ {i-1}\),前缀和\(s_i=\su ...

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

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

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

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

随机推荐

  1. 数学--数论--HDU 2197 本原串 (推规律)

    由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串? 答案mod2008. 例如,100100不是本原串,因为他是由两个 ...

  2. P6474 [NOI Online #2 入门组] 荆轲刺秦王

    P6474 [NOI Online #2 入门组] 荆轲刺秦王 bfs+差分+卡常 本来我其实是场内选手,但是因为记错提交时间,晚了半小时才交,交不上了,就自动降级为了场外选手 题面复杂,不简述了 首 ...

  3. Jmeter 数据库测试参数化

    1.JDBC Request 参数化 方法一.Jmeter 参数化,在 sql query 中使用变量 Jmeter 参数化,使用 csv 参数化 sql query 中使用 ${变量名} 引用 方法 ...

  4. Spring Boot 整合 Dubbo和Zookeeper

    Spring Boot 整合 Dubbo和Zookeeper Spring Boot 整合 Dubbo和Zookeeper 环境介绍 Zookeeper 安装 启动 Dubbo admin 搭建 创建 ...

  5. Python监控文件夹 && 发送邮件

    直接上代码: # python3 # -*- coding: utf-8 -*- # 2017/06/16 by luohan from email.mime.text import MIMEText ...

  6. Fibonacci相关问题

    公式如下: 递归的解法我就不写了,贴一个递推的. long long Fibonacci(unsigned int n) { ) ; ) ; ; ; long long res; ; i <= ...

  7. C. Ilya And The Tree 树形dp 暴力

    C. Ilya And The Tree 写法还是比较容易想到,但是这么暴力的写法不是那么的敢写. 就直接枚举了每一个点上面的点的所有的情况,对于这个点不放进去特判一下,然后排序去重提高效率. 注意d ...

  8. PHP循环引用会遇到的坑

    今天遇到这样一个问题: 如果foreach循环一个数组,引用去对它的元素做一些操作,会有什么问题吗? 比如 [1, 2, 3],foreach循环的时候,引用给每个元素 * 2,再去foreach输出 ...

  9. 【HBase】底层原理

    目录 系统架构 表数据模型 物理存储 系统架构 在文章[HBase]基本介绍和基础架构中已经有简单介绍 Client -- 包含访问hbase的接口,client维护着一些cache来加快对hbase ...

  10. matlab 提示 Continuous sample time is not supported by discrete derivative 错误的解决办法

    Simulink仿真的时候,出行错误提示:Continuous sample time is not supported by discrete derivative 中文意思是:连续采样时间不支持离 ...