Submission #318756

#TimeUsernameProblemLanguageResultExecution timeMemory
318756shrek12357Deblo (COCI18_deblo)C++14
18 / 90
167 ms65540 KiB
#include <iostream> #include <vector> #include <algorithm> #include <string> #include <map> #include <set> #include <climits> #include <cmath> #include <fstream> #include <queue> #include <stack> #include <bitset> using namespace std; #define ll long long //cin.tie(0);ios_base::sync_with_stdio(0); const int MAXN = 1e5 + 5; vector<ll> vals(MAXN); vector<ll> adjList[MAXN]; ll n; ll dp[MAXN][40][2]; ll ans[40]; void dfs(int src, int par) { for (int i = 0; i < 40; i++) { if ((vals[src] >> i) & 1) { ans[i]++; dp[src][i][1] = 1; } else { dp[src][i][0] = 1; } } for (auto i : adjList[src]) { if (i == par) { continue; } dfs(i, src); for (int j = 0; j < 40; j++) { ans[j] += dp[src][j][1] * dp[i][j][0]; ans[j] += dp[src][j][0] * dp[i][j][1]; if ((vals[src] >> j) & 1) { dp[src][j][1] += dp[i][j][0]; dp[src][j][0] += dp[i][j][1]; } else { dp[src][j][1] += dp[i][j][1]; dp[src][j][0] += dp[i][j][0]; } } } } int main() { cin >> n; for (int i = 0; i < n; i++) { int temp; cin >> temp; vals[i] = temp; } for (int i = 0; i < n - 1; i++) { int a, b; cin >> a >> b; a--; b--; adjList[a].push_back(b); adjList[b].push_back(a); } dfs(0, 0); ll ret = 0; for (int i = 0; i < n; i++) { ret += pow(2, i) * ans[i]; } cout << ret << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...