제출 #758598

#제출 시각아이디문제언어결과실행 시간메모리
758598DmitryKhDeblo (COCI18_deblo)C++14
45 / 90
1092 ms65536 KiB
#include <iostream> #include <vector> #include <list> #include <unordered_map> using namespace std; using ll = long long; void DFS(int v, const vector<vector<int>>& E, const vector<int>& A, vector<bool>& V, vector<ll>& S, vector<vector<ll>>& TW) { S[v] = A[v]; TW[v].push_back(A[v]); V[v] = true; vector<int> VV; for (auto u : E[v]) { if (!V[u]) { DFS(u, E, A, V, S, TW); S[v] += S[u]; for (auto tw : TW[u]) { S[v] += A[v]^tw; TW[v].push_back(A[v]^tw); } for (auto vv : VV) { for (auto l : TW[u]) { for (auto r : TW[vv]) { S[v] += A[v]^l^r; } } } VV.push_back(u); } } } int main(int argc, char* argv[]) { int n; cin >> n; vector<int> A(n + 1); for (int i = 1; i <= n; i++) { cin >> A[i]; } vector<vector<int>> E(n + 1); for (int i = 0; i < n - 1; i++) { int u, v; cin >> u >> v; E[u].push_back(v); E[v].push_back(u); } { vector<ll> S(n + 1); vector<vector<ll>> TW(n + 1); { vector<bool> V(n + 1); DFS(1, E, A, V, S, TW); } /*for (int i = 1; i <= n; i++) cout << "S[" << i << "]=" << S[i] << '\n';*/ cout << S[1] << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...