1 条题解

  • 0
    @ 2024-7-29 14:32:13
    #include<bits/stdc++.h>
    #define ull unsigned long long
    using namespace std;
    int n,fa[500100],last[500100],line[500100];
    ull f[500100];
    char c[500100];
    void pre( ){
    	scanf("%d",&n);
    	int i;
    	getchar( );
    	for(i=1;i<=n;i++)
    	c[i]=getchar( );
    	getchar( );
    	for(i=2;i<=n;i++)
    	scanf("%d",&fa[i]);
    	fa[1]=0;
    	f[1]=0;
    	last[1]=c[1]=='('?1:0;
    	line[1]=0;
    	return;
    }
    ull dfs(int k){
    	if(f[k]||k==1)return f[k];
    	dfs(fa[k]);
    	if(c[k]=='('){                   
    		last[k]=k;                 
    		f[k]=f[fa[k]];                
    		line[k]=0;                    
    	}else if(last[fa[k]]){            
    		f[k]=f[fa[k]]+line[fa[last[fa[k]]]]+1;            
    		last[k]=last[fa[last[fa[k]]]];                     
    		line[k]=line[fa[last[fa[k]]]]+1;                  	}else{                           
    		last[k]=0;
    		f[k]=f[fa[k]];               
    		line[k]=0;
    	}
    	return f[k];
    }
    int main( ){
    	pre( );
    	ull ans=0;
    	int i;
    	for(i=2;i<=n;i++)ans=ans xor dfs(i)*i;
    	cout<<ans<<endl;
    	return 0;
    }
    
    • 1

    信息

    ID
    790
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    30
    已通过
    6
    上传者