1 条题解

  • 0
    @ 2026-1-14 17:12:35

    #include<bits/stdc++.h>
    using namespace std;
    //dengyaotriangle!
    
    const int maxl=21;
    const int maxn=1<<maxl;
    
    int n;
    unsigned a[maxn];
    vector<int> adj[maxn];
    unsigned w[maxl][maxn];
    
    unsigned long long tans=0;
    
    unsigned dfs(int u,unsigned d){
        unsigned ans=a[u];
        for(int j=0;j<maxl;j++)w[j][(d+a[u])&((1u<<j)-1u)]^=1u<<j;
        for(int j=0;j<maxl;j++)ans^=w[j][d&((1u<<j)-1u)];
        for(int i=0;i<adj[u].size();i++){
            int v=adj[u][i];
            ans^=dfs(v,d+1);
        }
        for(int j=0;j<maxl;j++)ans^=w[j][d&((1u<<j)-1u)];
        //cerr<<u<<' '<<ans<<endl;
        tans+=ans;
        return ans;
    }
    
    int main(){
        ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
        cin>>n;
        for(int i=1;i<=n;i++)cin>>a[i];
        for(int i=2;i<=n;i++){
            int f;cin>>f;
            adj[f].push_back(i);
        }
        dfs(1,0);
        cout<<tans;
        return 0;
    }
    
    
    • 1

    信息

    ID
    7229
    时间
    2000ms
    内存
    512MiB
    难度
    9
    标签
    递交数
    9
    已通过
    5
    上传者