AcWing 1153. 括号树
原题链接
中等
作者:
光在黑暗中发亮
,
2019-12-14 10:07:37
,
所有人可见
,
阅读 756
C++ 代码
#include <iostream>
#include <cstring>
using namespace std;
const int N=500010;
long long f[N],k[N],t[N],l[N];
long long n,ans;
string s;
int main()
{
cin>>n;
cin>>s;
s=' '+s;
for(int i=2;i<=n;i++)
cin>>f[i];
k[1]=0;
t[1]=0;
f[1]=0;
for(int i=2;i<=n;i++)
{
if(s[i]=='(') {k[i]=k[f[i]];continue;}
int j=i,x=1;
while(j>0)
{
j=f[j];
if(s[j]=='(') x--;else x++;
if(x==0) {t[i]=t[f[j]]+1;break;}
}
k[i]=k[f[i]]+t[i];
}
for(int i=2;i<=n;i++)
ans=ans^(i*k[i]);
cout<<ans;
return 0;
}