#include <bits/stdc++.h> #define endl '\n' using i64 = long long; using namespace std; signed main(){ std::ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; vector<int> a(n + 1); vector<bool> vis(n + 1); vector<vector<int>> e(n + 1); for (int i = 1; i <= n; i++) cin >> a[i]; while (m--){ int u, v; cin >> u >> v; e[u].emplace_back(v), e[v].emplace_back(u); } i64 ans = 0; int mx = 0; auto dfs = [&](auto dfs, int u, int fa) -> void { if (vis[u]) return; vis[u] = 1; mx = max(mx, a[u]); //维护最大元素值 for (auto it : e[u]){ //无向图遍历 if (it == fa) continue; dfs(dfs, it, u); } }; vector<int> v; for (int i = 1; i <= n; i++){ mx = 0; if (!vis[i]){ if(e[i].size()) //已经存在边 dfs(dfs, i, 0); else mx = a[i]; v.emplace_back(mx); } } sort(v.begin(), v.end()); //按权值大小升序 int num = v.size(); for (int i = 1; i < num; i++) ans += v[i]; cout << ans << endl; return 0; }