제출 #854457

#제출 시각아이디문제언어결과실행 시간메모리
854457vjudge1Sjekira (COCI20_sjekira)C++17
40 / 110
1066 ms30456 KiB
//author: Ahmet Alp Orakci #include <bits/stdc++.h> using namespace std; using i64 = long long; #define int i64 #define ONLINE_JUDGE void solve() { int n; cin >> n; vector <int> vec(n +1); for(int i = 1; i <= n; i++) cin >> vec[i]; set <int> adj[n +1]; for(int i = 1; i <= n -1; i++) { int u, v; cin >> u >> v; adj[u].emplace(v); adj[v].emplace(u); } function <int(int, int)> dfsMax = [&](int node, int par) -> int { int ind = node; for(const int &child : adj[node]) { if(child != par) { int g = dfsMax(child, node); //cerr << child << " " << node << " :: " << g << "\n"; if(vec[g] >= vec[ind]) { ind = g; } } } return ind; }; int res = 0; function <void(int)> dfsAns = [&](int node) -> void { //cerr << "# " << node << "\n"; int cev = 0; vector <int> vvec; for(const int &child : adj[node]) { cev += vec[node]; int g = dfsMax(child, node); cerr << child << " " << node << " :: " << g << "\n"; cev += vec[g]; adj[child].erase(node); vvec.emplace_back(child); } adj[node].clear(); for(int &i : vvec) { dfsAns(dfsMax(i, node)); } //cerr << node << " " << cev << "\n"; res += cev; }; dfsAns(dfsMax(1, 0)); cout << res; return; } signed main() { #ifndef ONLINE_JUDGE freopen(".in", "r", stdin); freopen(".out", "w", stdout); #endif ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int t = 1; //cin >> t; for(int i = 1; i <= t; i++) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...