Submission #1284502

#TimeUsernameProblemLanguageResultExecution timeMemory
1284502aren_danceDeblo (COCI18_deblo)C++20
63 / 90
92 ms7592 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; const int mod=1e9+7; const int N=1e6+1; vector<int> g[N]; ll dp[N]; ll answ; ll a[N]; ll pref[N]; ll cnt[N][2]; int n; void dfs(int v,int p){ dp[v]=(dp[p]^a[v]); answ+=dp[v]; for(auto i:g[v]){ if(i!=p){ dfs(i,v); } } } int main(){ cin>>n; if(n>1e4){ for(int j=0;j<30;++j){ cnt[j][0]++; } for(int i=1;i<=n;++i){ cin>>a[i]; pref[i]=(pref[i-1]^a[i]); for(int j=0;j<30;++j){ if((pref[i]&(1<<j))){ cnt[j][1]++; } else{ cnt[j][0]++; } } for(int j=0;j<30;++j){ if(((1<<j)&pref[i])){ ll e=(1<<j); e*=cnt[j][0]; answ+=e; } else{ ll e=(1<<j); e*=cnt[j][1]; answ+=e; } } } for(int i=1;i<n;++i){ int u,v; cin>>u>>v; g[u].push_back(v); g[v].push_back(u); } cout<<answ; } else{ for(int i=1;i<=n;++i){ cin>>a[i]; } for(int i=1;i<n;++i){ int u,v; cin>>u>>v; g[u].push_back(v); g[v].push_back(u); } for(int i=1;i<=n;++i){ dfs(i,0); answ+=a[i]; } cout<<answ/2; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...