题解:P14731 [ICPC 2022 Seoul R] Parentheses Tree
算法分析
要解决这个问题,我们需要根据给定的匹配括号字符串计算有根有序树中所有叶节点到根节点的距离之和。叶节点在括号字符串中表现为连续的 "
核心思路
括号字符串与树结构的对应关系:每个 "
深度跟踪:通过遍历括号字符串,维护当前深度(嵌套层数)。遇到 "
叶节点识别与距离计算:当连续遇到 "
解释
深度跟踪:遍历字符串时,遇到 "
叶节点识别:当连续的 "
距离累加:将每个叶节点的深度累加到总和中,得到最终结果。
::::success[AC代码]
代码实现
#include<bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
long long sum = 0;
int depth = 0;
for (int i = 0; i < s.size(); ++i) {
if (s[i] == '(') {
depth++;
} else {
depth--;
if (i > 0 && s[i - 1] == '(') { // 检测到"()",即叶节点
sum += depth;
}
}
}
cout << sum << endl;
return 0;
}
::::