Submission #1222557

#TimeUsernameProblemLanguageResultExecution timeMemory
1222557nguyenvanhieu812009Sjekira (COCI20_sjekira)C++20
10 / 110
264 ms589824 KiB
#include <bits/stdc++.h> using namespace std; const long long maxn = 1e5 + 1; struct cmp { long long idx; long long value; }; bool sapxep(cmp a, cmp b) { return a.value > b.value; } long long n; cmp t[maxn]; vector<long long> adj[maxn]; long long values[maxn]; // để truy cập giá trị nhanh qua chỉ số void dfs(long long u, long long &ans, vector<bool> &visited) { visited[u] = true; ans = max(ans, values[u]); for (long long v : adj[u]) { if (!visited[v]) { dfs(v, ans, visited); } } } void solve() { cin >> n; for (long long i = 1; i <= n; i++) { cin >> t[i].value; t[i].idx = i; values[i] = t[i].value; } sort(t + 1, t + 1 + n, sapxep); for (long long i = 1; i < n; i++) { long long u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } long long res = 0; vector<vector<bool>> visitedEdge(n + 1, vector<bool>(n + 1, false)); for (long long i = 1; i <= n; i++) { long long u = t[i].idx; for (long long v : adj[u]) { if (visitedEdge[u][v]) continue; visitedEdge[u][v] = visitedEdge[v][u] = true; // Tạm thời gỡ bỏ cạnh adj[u].erase(remove(adj[u].begin(), adj[u].end(), v), adj[u].end()); adj[v].erase(remove(adj[v].begin(), adj[v].end(), u), adj[v].end()); long long ans1 = values[u], ans2 = values[v]; vector<bool> visited(n + 1, false); dfs(u, ans1, visited); fill(visited.begin(), visited.end(), false); dfs(v, ans2, visited); res += ans1 + ans2; } } cout << res << '\n'; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); 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...