#include #include #include #include #define X first #define Y second #define N 3033 #define FOR(i,n) for(int i=0;i<(n);i++) using namespace std; int n; unsigned vs[N]; vector so[N]; int dfs(int x, unsigned mask) { vs[x] &= ~mask; int g_sc = 1; for (auto nei : so[x]) { if ((vs[nei] & mask) == 0) continue; g_sc += dfs(nei, mask); } return g_sc; } int main() { ios_base::sync_with_stdio(false); cin >> n; FOR(i,n) cin >> vs[i]; FOR(i,n-1) { int a,b; cin >> a >> b; so[a].push_back(b); so[b].push_back(a); } int g_sc = 0; FOR(d, 20) { unsigned mask = 1 << d; FOR (i,n) { //cout << "n: "<< i << endl; if ((mask & vs[i]) > 0) { int sc = dfs(i, mask); //cout << "\t\t" << sc << endl; g_sc += (sc*(sc+1) / 2)*mask; } } } cout << g_sc << endl; return 0; }