#include <bits/stdc++.h>
#define int long long
using namespace std;
struct Tree{
char data;
list<int> sons;
}tree[500005];
int lst[500005], sum[500005];
string target;
int baby(){
stack<int> s;
for(int i = 0; i < target.length(); i++){
int a = i + 1;
if(target[i] == '(') s.push(a);
if(target[i] == ')' && !s.empty()) lst[a] = lst[s.top()] + 1, s.pop();
sum[a] = sum[a - 1] + lst[a];
}
return sum[target.length()];
}
int ans = 0;
void search(int now){
printf("%lld %s %lld %lld\n", now, target.c_str(), baby(), ans);
ans ^= now * baby();
if(tree[now].sons.empty()){
return;
}
for(auto it = tree[now].sons.begin(); it != tree[now].sons.end(); it++){
target.push_back(tree[*it].data);
search(*it);
target.pop_back();
}
return;
}
signed main(){
int n;
char ch;
scanf("%lld", &n);
while(isspace(ch = getchar()));
tree[1].data = ch;
for(int i = 2; i <= n; i++){
tree[i].data = getchar();
}
for(int i = 2, t; i <= n; i++){
scanf("%lld", &t);
tree[t].sons.push_back(i);
}
target += ch;
search(1);
printf("%lld\n", ans);
return 0;
}
search里加了一行调试输出.
8 WA + 10 TLE 敢问有什么问题吗
按理来说应该是 10AC + 10 TLE 才对