【括号 DFS】P5658 [CSP-S2019] 括号树|普及+
本文涉及的知识点CDFS[CSP-S2019] 括号树题目背景本题中合法括号串的定义如下()是合法括号串。如果A是合法括号串则(A)是合法括号串。如果AB是合法括号串则AB是合法括号串。本题中子串与不同的子串的定义如下字符串S的子串是S中连续的任意个字符组成的字符串。S的子串可用起始位置l ll与终止位置r rr来表示记为S ( l , r ) S (l, r)S(l,r)1 ≤ l ≤ r ≤ ∣ S ∣ 1 \leq l \leq r \leq |S |1≤l≤r≤∣S∣∣ S ∣ |S |∣S∣表示 S 的长度。S的两个子串视作不同当且仅当它们在S中的位置不同即l ll不同或r rr不同。题目描述一个大小为n nn的树包含n nn个结点和n − 1 n - 1n−1条边每条边连接两个结点且任意两个结点间有且仅有一条简单路径互相可达。小 Q 是一个充满好奇心的小朋友有一天他在上学的路上碰见了一个大小为n nn的树树上结点从1 ∼ n 1 \sim n1∼n编号1 11号结点为树的根。除1 11号结点外每个结点有一个父亲结点u uu2 ≤ u ≤ n 2 \leq u \leq n2≤u≤n号结点的父亲为f u f_ufu​1 ≤ f u u 1 ≤ f_u u1≤fu​u号结点。小 Q 发现这个树的每个结点上恰有一个括号可能是(或)。小 Q 定义s i s_isi​为将根结点到i ii号结点的简单路径上的括号按结点经过顺序依次排列组成的字符串。显然s i s_isi​是个括号串但不一定是合法括号串因此现在小 Q 想对所有的i ii1 ≤ i ≤ n 1\leq i\leq n1≤i≤n求出s i s_isi​中有多少个互不相同的子串是合法括号串。这个问题难倒了小 Q他只好向你求助。设s i s_isi​共有k i k_iki​个不同子串是合法括号串 你只需要告诉小 Q 所有i × k i i \times k_ii×ki​的异或和即( 1 × k 1 ) xor ( 2 × k 2 ) xor ( 3 × k 3 ) xor ⋯ xor ( n × k n ) (1 \times k_1)\ \text{xor}\ (2 \times k_2)\ \text{xor}\ (3 \times k_3)\ \text{xor}\ \cdots\ \text{xor}\ (n \times k_n)(1×k1​)xor(2×k2​)xor(3×k3​)xor⋯xor(n×kn​)其中x o r xorxor是位异或运算。输入格式第一行一个整数n nn表示树的大小。第二行一个长为n nn的由(与)组成的括号串第i ii个括号表示i ii号结点上的括号。第三行包含n − 1 n − 1n−1个整数第i ii1 ≤ i n 1 \leq i \lt n1≤in个整数表示i 1 i 1i1号结点的父亲编号f i 1 f_{i1}fi1​。输出格式仅一行一个整数表示答案。样例 #1样例输入 #15 (()() 1 1 2 2样例输出 #16提示【样例解释1】树的形态如下图将根到 1 号结点的简单路径上的括号按经过顺序排列所组成的字符串为(子串是合法括号串的个数为0 00。将根到 2 号结点的字符串为((子串是合法括号串的个数为0 00。将根到 3 号结点的字符串为()子串是合法括号串的个数为1 11。将根到 4 号结点的字符串为(((子串是合法括号串的个数为0 00。将根到 5 号结点的字符串为(()子串是合法括号串的个数为1 11。【数据范围】括号 DFS令节点i对应的字符是ss[i]。s[i]记录根节点到形成的字符串t(j…i)记录i的祖先节点j到i形成的字符串。合法括号的另一种定义字符(的分值1字符)的分值-1。s的任意前缀分值0s的分值等于0。c[i] 记录s[i]记录s[i]合法后缀数量d[i] 记录s[i]记录合法子串数量。d[i] d[i的父节点]c[i]。DFS求c[cur]v[i]包括j表示t(j…cur)的分值是i。v[i]只记录以cur结尾的子字符串。cc ss[cur]是分值如果把v[i][j] 全部改成v[icur][j]那时间复杂度是O(nn)。我们不修改v[i][j]只将iAddch。if(cc-iAdd0) { v[cc-iAaa].Add(cur);}if(-1-iAdd 0) v[-1-iAdd]的元素移动 哈希集合inv。c[i] v[-iAdd].size();DFS子节点inv 存在 cur 删除。否则在v中删除。iAdd - cc代码核心代码#includeiostream#includesstream#includevector#includemap#includeunordered_map#includeset#includeunordered_set#includestring#includealgorithm#includefunctional#includequeue#includestack#includeiomanip#includenumeric#includemath.h#includeclimits#includeassert.h#includecstring#includelist#includebitsetusingnamespacestd;templateclassT1,classT2std::istreamoperator(std::istreamin,pairT1,T2pr){inpr.firstpr.second;returnin;}templateclassT1,classT2,classT3std::istreamoperator(std::istreamin,tupleT1,T2,T3t){inget0(t)get1(t)get2(t);returnin;}templateclassT1,classT2,classT3,classT4std::istreamoperator(std::istreamin,tupleT1,T2,T3,T4t){inget0(t)get1(t)get2(t)get3(t);returnin;}templateclassTintvectorTRead(){intn;scanf(%d,n);vectorTret(n);for(inti0;in;i){cinret[i];}returnret;}templateclassTintvectorTRead(intn){vectorTret(n);for(inti0;in;i){cinret[i];}returnret;}classSolution{public:longlongAns(string s,vectorintparent){constintNs.length();parent.insert(parent.begin(),0);for(autoi:parent){i--;}vectorvectorintchilds(N);for(inti1;iN;i){childs[parent[i]].emplace_back(i);}vectorlonglongc(N),d(N);unordered_mapint,longlongmSuffVCnt;functionvoid(int,int)DFS[](intcur,intiAdd){constautocvalue((s[cur])?1:-1;iAddcvalue;mSuffVCnt[cvalue-iAdd];//s[cur...cur]数量1autocntErasemSuffVCnt[-1-iAdd];mSuffVCnt.erase(-1-iAdd);//权值-1非法删除c[cur]mSuffVCnt[-iAdd];if(0!cur){d[cur]d[parent[cur]];}d[cur]c[cur];for(constautochi:childs[cur]){DFS(chi,iAdd);}mSuffVCnt[-1-iAdd]cntErase;mSuffVCnt[cvalue-iAdd]--;iAdd-cvalue;};DFS(0,0);longlongans0;for(inti0;iN;i){ans^(i1)*d[i];}returnans;}};intmain(){#ifdef_DEBUGfreopen(a.in,r,stdin);#endif// DEBUGintn;cinn;autosReadchar(n);s.emplace_back(0);autoparReadint(n-1);autoresSolution().Ans(s.data(),par);#ifdef_DEBUG//printf(K%d, K);//Out(b, b);//Out(c, c);#endif// DEBUGcoutres;return0;}单元测试vectorintparent;string s;TEST_METHOD(TestMethod11){parent{1,1,2,2},s(()();autoresSolution().Ans(s,parent);AssertEx(6LL,res);}扩展阅读我想对大家说的话工作中遇到的问题可以按类别查阅鄙人的算法文章请点击《算法与数据汇总》。学习算法按章节学习《喜缺全书算法册》大量的题目和测试用例打包下载。重视操作有效学习明确的目标 及时的反馈 拉伸区难度合适 专注闻缺陷则喜(喜缺)是一个美好的愿望早发现问题早修改问题给老板节约钱。子墨子言之事无终始无务多业。也就是我们常说的专业的人做专业的事。如果程序是一条龙那算法就是他的是睛失败反思成功 成功反思成功视频课程先学简单的课程请移步CSDN学院听白银讲师也就是鄙人的讲解。https://edu.csdn.net/course/detail/38771如何你想快速形成战斗了为老板分忧请学习C#入职培训、C入职培训等课程https://edu.csdn.net/lecturer/6176测试环境操作系统win7 开发环境 VS2019C17或者 操作系统win10 开发环境 VS2022C17如无特殊说明本算法用**C**实现。

相关新闻

VMware去虚拟化实战:从vmware-vmx.exe修改到BIOS伪装全流程

VMware去虚拟化实战:从vmware-vmx.exe修改到BIOS伪装全流程

简介:一份面向VMware虚拟机玩家的去虚拟化实操教程,目标是让虚拟机系统通过鲁大师等硬件检测工具的验证。文档从VMware 16.1.2安装与新建虚拟机开始,依次讲解硬盘vmdk替换、VMware Tools与共享文件夹配置、声卡/网卡/显卡参数修改、BIOS ROM定…

2026/10/9 4:38:56 阅读更多 →
OpenAI DevDay不是只有新模型:Codex CLI与API实战指南

OpenAI DevDay不是只有新模型:Codex CLI与API实战指南

1. 发布会没爆点,但别只盯着标题看先说结论:如果你刷到“OpenAI DevDay 梭哈全部新品?GPT-6.1 Sol 平平无奇”这种标题,先别急着点进去跟着吐槽。作为常年蹲守在开发者生态里的人,我得说,这场发布会真正值得…

2026/10/9 4:38:56 阅读更多 →
Spring Boot大学生社交平台毕设全解析:从技术选型到核心实现

Spring Boot大学生社交平台毕设全解析:从技术选型到核心实现

又到一年毕设季,“基于springboot的大学生社交平台”这类题目在Java方向里,算是最经典的一档了。需求清晰、边界明确、扩展空间也够,不管是本科还是研究生,拿它来当毕业设计都很合适。这篇博文,我结合自己实际做过的几…

2026/10/9 4:38:56 阅读更多 →

最新新闻

生产级Coding Agent调优实战:Harness工程化决定落地下限

生产级Coding Agent调优实战:Harness工程化决定落地下限

1. 从"能跑"到"好用":生产级 Coding Agent 的最后一公里到底卡在哪Vibe Coding 这个词这两年被聊得很多,大意是开发者用自然语言描述意图,让 Coding Agent 去生成、修改、验证代码,人只负责把握方向和验收。听…

2026/10/9 6:35:27 阅读更多 →
Java Swing人事管理系统:JDBC+MySQL课程设计实战与避坑指南

Java Swing人事管理系统:JDBC+MySQL课程设计实战与避坑指南

简介:这份资源是一套基于 Java Swing、JDBC 与 MySQL 实现的人事管理系统课程设计项目,面向正在完成数据库课程设计、需要可运行参考案例的计算机相关专业学生。项目包含可视化软件界面,覆盖人员信息维护、数据库连接与增删改查等典型业务场景…

2026/10/9 6:35:27 阅读更多 →
MySQL校对规则:utf8mb4_general_ci与utf8mb4_bin的差异及选型

MySQL校对规则:utf8mb4_general_ci与utf8mb4_bin的差异及选型

1. 这两个校对规则到底在吵什么看你一脸问号地点进来,我猜你多半是遇到过这种情况:建表的时候复制了一段别人的SQL,里面有CHARSETutf8mb4 COLLATEutf8mb4_general_ci,或者是utf8mb4_bin,当时也没多想,能用就…

2026/10/9 6:35:27 阅读更多 →
PS5底层开发合规边界与技术可行性分析

PS5底层开发合规边界与技术可行性分析

我无法根据当前输入生成符合要求的博文。原因如下:项目标题 "AnyPS5" 缺乏明确指向性:该词在公开技术语境中无公认定义,既非官方产品名(索尼未发布/命名过 AnyPS5)、非开源项目(GitHub、GitLab、…

2026/10/9 6:35:27 阅读更多 →
claude-mem:为Claude Code打造跨会话长期记忆的实战指南

claude-mem:为Claude Code打造跨会话长期记忆的实战指南

用过 Claude Code 写真实项目的人,基本都遇到过这个场景:昨天刚跟 AI 讨论清楚的一个架构方案,今天新开一个会话,它完全不记得了。你在同一个仓库里翻历史对话记录,发现上一个会话已经把项目的来龙去脉都喂给了它&…

2026/10/9 6:35:27 阅读更多 →
Agent-Reach:LLM API智能路由与成本可控调度中枢

Agent-Reach:LLM API智能路由与成本可控调度中枢

1. 项目概述:Agent-Reach 是什么?它解决的不是“能不能用”,而是“怎么用得稳、用得准、用得省”Agent-Reach 这个名字乍看像某个开源模型或工具库,但结合 CLI、API、YouTube、Reddit 这些高频热词,再叠加上“zcode cl…

2026/10/9 6:34:27 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →