1 条题解
-
0

#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
- 上传者