Problem p03440 (C++)

Buggy submission (status: Time Limit Exceeded):
/*
░░░░░░░░░░░░░░░░▄▄█▀▀██▄▄░░░░░░░
░░░░░░░░░░░░░▄█▀▀░░░░░░░▀█░░░░░░
░░░░░░░░░░░▄▀░░░░░░░░░░░░░█░░░░░
░░░░░░░░░▄█░░░░░░░░░░░░░░░█░░░░░
░░░░░░░██▀░░░░░░░▄▄▄░░▄░█▄█▄░░░░
░░░░░▄▀░░░░░░░░░░████░█▄██░▀▄░░░
░░░░█▀░░░░░░░░▄▄██▀░░█████░██░░░
░░░█▀░░░░░░░░░▀█░▀█▀█▀▀▄██▄█▀░░░
░░░██░░░░░░░░░░█░░█░█░░▀▀▄█▀░░░░
░░░░█░░░░░█░░░▀█░░░░▄░░░░░▄█░░░░
░░░░▀█░░░░███▄░█░░░░░░▄▄▄▄█▀█▄░░
░░░░░▀██░░█▄▀▀██░░░░░░░░▄▄█░░▀▄░
░░░░░░▀▀█▄░▀▄▄░▄░░░░░░░███▀░░▄██
░░░░░░░░░▀▀▀███▀█▄░░░░░█▀░▀░░░▀█
░░░░░░░░░░░░▄▀░░░▀█▄░░░░░▄▄░░▄█▀
░░░▄▄▄▀▀▀▀▀█▀░░░░░█▄▀▄▄▄▄▄▄█▀▀░░
░▄█░░░▄██▀░░░░░░░░░█▄░░░░░░░░░░░
█▀▀░▄█░░░░░░░░░░░░░░▀▀█▄░░░░░░░░
█░░░█░░░░░░░░░░░░░░░░░░█▄░░░░░░░
*/
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define dbg(x) cout << #x << '=' << x << '\n';
#define ll long long
#define x first
#define y second
#define pi pair<int, int>
#define vi vector<int>
#define L nod << 1
#define R ((nod << 1) | 1)
#define int ll
const ll mod = 998244353;
const ll nmax = 1000003;
#define int ll
int n, a[100010], m, k, mn, ans, viz[100010];
multiset<int> s;
vi g[100010];

void dfs(int nod) {
  viz[nod] = 1;
  mn = min(mn, a[nod]);
  for (int i : g[nod])
    if (viz[i] == 0)
      dfs(i);
}

int32_t main() {
  ios_base ::sync_with_stdio(0);
  cin.tie();
  cout.tie();
  cin >> n >> m;
  if (n < 2 * (n - m - 1))
    return cout << "Impossible", 0;
  if (m == n - 1)
    return cout << 0, 0;
  for (int i = 1; i <= n; i++)
    cin >> a[i], s.insert(a[i]);
  for (int i = 1, x, y; i <= m; i++) {
    cin >> x >> y;
    x++, y++;
    g[x].pb(y);
    g[y].pb(x);
  }
  for (int i = 1; i <= n; i++) {
    if (viz[i] == 0) {
      k++;
      mn = 1e18;
      dfs(i);
      ans += mn;
      s.erase(s.find(mn));
    }
  }
  while (k < 2 * (n - m - 1)) {
    ans += *s.begin();
    s.erase(s.begin());
  }
  cout << ans;
}


Fixed submission:
/*
░░░░░░░░░░░░░░░░▄▄█▀▀██▄▄░░░░░░░
░░░░░░░░░░░░░▄█▀▀░░░░░░░▀█░░░░░░
░░░░░░░░░░░▄▀░░░░░░░░░░░░░█░░░░░
░░░░░░░░░▄█░░░░░░░░░░░░░░░█░░░░░
░░░░░░░██▀░░░░░░░▄▄▄░░▄░█▄█▄░░░░
░░░░░▄▀░░░░░░░░░░████░█▄██░▀▄░░░
░░░░█▀░░░░░░░░▄▄██▀░░█████░██░░░
░░░█▀░░░░░░░░░▀█░▀█▀█▀▀▄██▄█▀░░░
░░░██░░░░░░░░░░█░░█░█░░▀▀▄█▀░░░░
░░░░█░░░░░█░░░▀█░░░░▄░░░░░▄█░░░░
░░░░▀█░░░░███▄░█░░░░░░▄▄▄▄█▀█▄░░
░░░░░▀██░░█▄▀▀██░░░░░░░░▄▄█░░▀▄░
░░░░░░▀▀█▄░▀▄▄░▄░░░░░░░███▀░░▄██
░░░░░░░░░▀▀▀███▀█▄░░░░░█▀░▀░░░▀█
░░░░░░░░░░░░▄▀░░░▀█▄░░░░░▄▄░░▄█▀
░░░▄▄▄▀▀▀▀▀█▀░░░░░█▄▀▄▄▄▄▄▄█▀▀░░
░▄█░░░▄██▀░░░░░░░░░█▄░░░░░░░░░░░
█▀▀░▄█░░░░░░░░░░░░░░▀▀█▄░░░░░░░░
█░░░█░░░░░░░░░░░░░░░░░░█▄░░░░░░░
*/
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define dbg(x) cout << #x << '=' << x << '\n';
#define ll long long
#define x first
#define y second
#define pi pair<int, int>
#define vi vector<int>
#define L nod << 1
#define R ((nod << 1) | 1)
#define int ll
const ll mod = 998244353;
const ll nmax = 1000003;
#define int ll
int n, a[100010], m, k, mn, ans, viz[100010];
multiset<int> s;
vi g[100010];

void dfs(int nod) {
  viz[nod] = 1;
  mn = min(mn, a[nod]);
  for (int i : g[nod])
    if (viz[i] == 0)
      dfs(i);
}

int32_t main() {
  ios_base ::sync_with_stdio(0);
  cin.tie();
  cout.tie();
  cin >> n >> m;
  if (n < 2 * (n - m - 1))
    return cout << "Impossible", 0;
  if (m == n - 1)
    return cout << 0, 0;
  for (int i = 1; i <= n; i++)
    cin >> a[i], s.insert(a[i]);
  for (int i = 1, x, y; i <= m; i++) {
    cin >> x >> y;
    x++, y++;
    g[x].pb(y);
    g[y].pb(x);
  }
  for (int i = 1; i <= n; i++) {
    if (viz[i] == 0) {
      k++;
      mn = 1e18;
      dfs(i);
      ans += mn;
      s.erase(s.find(mn));
    }
  }
  for (auto it = s.begin(); k < 2 * (n - m - 1); k++, it++)
    ans += *it;
  cout << ans;
}