以下代码RE 10pts,蒟蒻百思不得其解
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N=5e5+1;
int n,l,fa[N],pre[N];
int idx,ne[N],e[N],h[N];
string s0,s;
LL ans[N];
void add(int u,int v){
e[++idx]=v,ne[idx]=h[u],h[u]=idx;
}
void dfs(int u){
if(s[u]=='('){
pre[u]=u;
}else{
pre[u]=pre[fa[u]];
if(pre[u]){
ans[u]=1+ans[fa[pre[u]]];
pre[u]=pre[fa[pre[u]]];
}
}
for(int i=h[u];i;i=ne[i]) dfs(e[i]);
}
int main(){
cin>>n;
cin>>s0;
l=s0.size();
for(int i=0;i<l;i++) s[i+1]=s0[i]; //这里
for(int i=2;i<=n;i++){
cin>>fa[i];
add(fa[i],i);
}
dfs(1);
LL res=ans[1];
for(int i=2;i<=n;i++){
ans[i]+=ans[fa[i]]
res^=(ans[i]*(1LL*i));
}
cout<<res;
return 0;
}
然后修改了s的初始化操作,像这样:
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N=5e5+1;
int n,l,fa[N],pre[N];
int idx,ne[N],e[N],h[N];
string s0,s;
LL ans[N];
void add(int u,int v){
e[++idx]=v,ne[idx]=h[u],h[u]=idx;
}
void dfs(int u){
if(s[u]=='('){
pre[u]=u;
}else{
pre[u]=pre[fa[u]];
if(pre[u]){
ans[u]=1+ans[fa[pre[u]]];
pre[u]=pre[fa[pre[u]]];
}
}
for(int i=h[u];i;i=ne[i]) dfs(e[i]);
}
int main(){
cin>>n;
cin>>s0;
l=s0.size();
s=" "+s0; //这里
for(int i=2;i<=n;i++){
cin>>fa[i];
add(fa[i],i);
}
dfs(1);
LL res=ans[1];
for(int i=2;i<=n;i++){
ans[i]+=ans[fa[i]];
res^=(ans[i]*(1LL*i));
}
cout<<res;
return 0;
}
然后AC了
想问下是为什么(好奇
(如果是我太菜了 憋骂我