Problem p02364 (C++) — buggy submission, verdict: Time Limit Exceeded

#define _CRT_SECURE_NO_WARNINGS
#include "bits/stdc++.h"

#define PB push_back
#define PF push_front
#define LB lower_bound
#define UB upper_bound
#define fr(x) freopen(x, "r", stdin)
#define fw(x) freopen(x, "w", stdout)
#define iout(x) printf("%d\\n", x)
#define lout(x) printf("%lld\\n", x)
#define REP(x, l, u) for (ll x = l; x < u; x++)
#define RREP(x, l, u) for (ll x = l; x >= u; x--)
#define complete_unique(a) a.erase(unique(a.begin(), a.end()), a.end())
#define mst(x, a) memset(x, a, sizeof(x))
#define all(a) a.begin(), a.end()
#define PII pair<int, int>
#define PLL pair<ll, ll>
#define MP make_pair
#define sqr(x) ((x) * (x))
#define lowbit(x) ((x) & (-(x)))
#define lson (ind << 1)
#define rson (ind << 1 | 1)
#define se second
#define fi first
#define sz(x) ((int)x.size())
#define EX0 exit(0);

typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ld;
using namespace std;
typedef vector<ll> VLL;
typedef vector<int> VI;
const int block_size = 320;
typedef complex<ll> point;
const ll mod = 1e9 + 7;
const ll inf = 1e9 + 7;
const ld eps = 1e-9;
const db PI = atan(1) * 4;

template <typename T, typename S> inline bool upmin(T &a, const S &b) {
  return a > b ? a = b, 1 : 0;
}
template <typename T, typename S> inline bool upmax(T &a, const S &b) {
  return a < b ? a = b, 1 : 0;
}

ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a % b); }
ll pow(ll a, ll b) {
  if (b == 0) {
    return 1;
  }
  if (b == 1) {
    return a;
  }
  ll ans = pow(a, b / 2);
  ans *= ans;
  ans *= b % 2 == 1 ? a : 1;
  return ans;
}

namespace SOLVE {
struct edge {
  ll v1, v2, weight;
};

VI id;

ll parent(ll a) {
  if (id[a] == a) {
    return a;
  }
  id[a] = parent(id[a]);
  return id[a];
}

void unite(ll a, ll b) { id[parent(a)] = parent(b); }

int query(ll a, ll b) { return (parent(a) == parent(b)); }

bool comp(edge a, edge b) { return a.weight < b.weight; }

void main() {
  ll V, E, a, b, c;
  cin >> V >> E;

  vector<edge> edges;

  REP(i, 0, E) {
    cin >> a >> b >> c;
    edge x;
    x.v1 = a;
    x.v2 = b;
    x.weight = c;
    edges.push_back(x);
  }

  sort(edges.begin(), edges.end(), comp);

  id.resize(V);
  REP(i, 0, V) { id[i] = i; }

  ll ans = 0;
  for (int i = 0; i < E; i++) {
    const edge &e = edges[i];
    if (!query(e.v1, e.v2)) {
      // join them
      unite(e.v1, e.v2);
      // cout << e.v1 << ' ' << e.v2 << ' ' << e.weight << endl;
      ans += e.weight;
    }
  }
  cout << ans << endl;
}
} // namespace SOLVE

signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);

  int t;
  //    in(t);
  t = 1;
  while (t--) {
    SOLVE::main();
  }

  return 0;
}


Error: TLE

Fixed submission:

#define _CRT_SECURE_NO_WARNINGS
#include "bits/stdc++.h"

#define PB push_back
#define PF push_front
#define LB lower_bound
#define UB upper_bound
#define fr(x) freopen(x, "r", stdin)
#define fw(x) freopen(x, "w", stdout)
#define iout(x) printf("%d\\n", x)
#define lout(x) printf("%lld\\n", x)
#define REP(x, l, u) for (ll x = l; x < u; x++)
#define RREP(x, l, u) for (ll x = l; x >= u; x--)
#define complete_unique(a) a.erase(unique(a.begin(), a.end()), a.end())
#define mst(x, a) memset(x, a, sizeof(x))
#define all(a) a.begin(), a.end()
#define PII pair<int, int>
#define PLL pair<ll, ll>
#define MP make_pair
#define sqr(x) ((x) * (x))
#define lowbit(x) ((x) & (-(x)))
#define lson (ind << 1)
#define rson (ind << 1 | 1)
#define se second
#define fi first
#define sz(x) ((int)x.size())
#define EX0 exit(0);

typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ld;
using namespace std;
typedef vector<ll> VLL;
typedef vector<int> VI;
const int block_size = 320;
typedef complex<ll> point;
const ll mod = 1e9 + 7;
const ll inf = 1e9 + 7;
const ld eps = 1e-9;
const db PI = atan(1) * 4;

template <typename T, typename S> inline bool upmin(T &a, const S &b) {
  return a > b ? a = b, 1 : 0;
}
template <typename T, typename S> inline bool upmax(T &a, const S &b) {
  return a < b ? a = b, 1 : 0;
}

ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a % b); }
ll pow(ll a, ll b) {
  if (b == 0) {
    return 1;
  }
  if (b == 1) {
    return a;
  }
  ll ans = pow(a, b / 2);
  ans *= ans;
  ans *= b % 2 == 1 ? a : 1;
  return ans;
}

namespace SOLVE {
struct edge {
  ll v1, v2, weight;
};

template <int maxn> struct dsu {
  int f[maxn];
  dsu() { init(); }
  void init() { mst(f, -1); }
  int fa(int c) {
    if (f[c] < 0)
      return c;
    return f[c] = fa(f[c]);
  }
  void merge(int a, int b) {
    a = fa(a);
    b = fa(b);
    if (a == b)
      return;
    if (f[a] < f[b])
      swap(a, b);
    f[b] += f[a];
    f[a] = b;
  }
  bool same(int a, int b) { return fa(a) == fa(b); }
};
dsu<100010> bcj;
vector<edge> edges;
bool comp(const edge &a, const edge &b) { return a.weight < b.weight; }

void main() {
  ll V, E;
  cin >> V >> E;

  REP(i, 0, E) {
    edge x;
    scanf("%lld %lld %lld", &x.v1, &x.v2, &x.weight);
    edges.push_back(x);
  }

  sort(edges.begin(), edges.end(), comp);

  ll ans = 0;
  for (edge e : edges) {
    if (!bcj.same(e.v1, e.v2)) {
      // join them
      bcj.merge(e.v1, e.v2);
      // cout << e.v1 << ' ' << e.v2 << ' ' << e.weight << endl;
      ans += e.weight;
    }
  }
  cout << ans << endl;
}
} // namespace SOLVE

signed main() {

  int t;
  //    in(t);
  t = 1;
  while (t--) {
    SOLVE::main();
  }

  return 0;
}