2 条题解

  • 1
    @ 2026-8-18 9:51:14

    、、、 #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]||k1)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
      @ 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
      难度
      5
      标签
      递交数
      39
      已通过
      15
      上传者