Problem p01341 (C++) — buggy submission, verdict: Runtime Error

// #include<bits/stdc++.h>
#define _CRT_SBCURE_NO_DEPRECATE
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
// #define UP(i,x,y) for(int i=x;i<=y;i++)
// #define DOWN(i,x,y) for(int i=x;i>=y;i--)
#define sdddd(x, y, z, k) scanf("%d%d%d%d", &x, &y, &z, &k)
#define sddd(x, y, z) scanf("%d%d%d", &x, &y, &z)
#define sdd(x, y) scanf("%d%d", &x, &y)
#define sd(x) scanf("%d", &x)
#define mp make_pair
#define pb push_back
#define lson k << 1
#define rson k << 1 | 1
#define mid (l + r) / 2
#define ms(x, y) memset(x, y, sizeof x)
using namespace std;
typedef long long ll;
// typedef unsigned long long ull;
#define MOD 1000000007
const int maxn = 10050;
const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3f;
int n, m, s, t;
int len;
struct road {
  int u, v;
  double cost;
};
int arr[maxn][2];
road G[maxn << 2];
int par[maxn];
void init() {
  for (int i = 0; i < maxn; i++)
    par[i] = i;
}

int Find(int x) { return par[x] == x ? x : par[x] = Find(par[x]); }
bool same(int x, int y) {
  int fx = Find(x), fy = Find(y);
  if (fx == fy)
    return true;
  else
    return false;
}
void unite(int x, int y) {
  int fx = Find(x), fy = Find(y);
  if (fx == fy)
    return;
  else {
    par[fx] = fy;
    return;
  }
}
bool cmp(road a, road b) { return a.cost > b.cost; }
double kruskal() {
  sort(G, G + len, cmp);
  init();
  double res = 0;
  int cnt = 1;
  for (int i = 0; i < len; i++) {
    road e = G[i];
    if (!same(e.u, e.v)) {
      unite(e.u, e.v);
      res += e.cost;
      cnt++;
    }
  }
  return res;
}
double dist(double x, double y, double u, double v) {
  return sqrt(abs(x - u) * abs(x - u) + abs(y - v) * abs(y - v));
}
set<pair<int, int>> st;
int main() {
  // freopen("out.txt", "w", stdout);
  while (~sdd(n, m)) {
    ms(G, 0);
    len = 0;
    int ta, tb;
    for (int i = 1; i <= n; i++) {
      sdd(arr[i][0], arr[i][1]);
    }
    double sum = 0;
    for (int i = 1; i <= m; i++) {
      sdd(ta, tb);
      if (!st.count(mp(ta, tb))) {
        G[len].u = ta;
        G[len].v = tb;
        G[len].cost = dist(arr[ta][0], arr[ta][1], arr[tb][0], arr[tb][1]);
        sum += G[len].cost;
        len++;
        st.insert(mp(ta, tb));
        st.insert(mp(tb, ta));
      }
    }
    double ans = sum - kruskal();
    printf("%.3f\\n", ans);
  }
  return 0;
}


Error: 0

Fixed submission:

// #include<bits/stdc++.h>
#define _CRT_SBCURE_NO_DEPRECATE
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
// #define UP(i,x,y) for(int i=x;i<=y;i++)
// #define DOWN(i,x,y) for(int i=x;i>=y;i--)
#define sdddd(x, y, z, k) scanf("%d%d%d%d", &x, &y, &z, &k)
#define sddd(x, y, z) scanf("%d%d%d", &x, &y, &z)
#define sdd(x, y) scanf("%d%d", &x, &y)
#define sd(x) scanf("%d", &x)
#define mp make_pair
#define pb push_back
#define lson k << 1
#define rson k << 1 | 1
#define mid (l + r) / 2
#define ms(x, y) memset(x, y, sizeof x)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define MOD 1000000007
const int maxn = 10050;
const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3f;
int n, m, s, t;
int len;
struct road {
  int u, v;
  double cost;
};
int arr[maxn][2];
road G[maxn];
int par[maxn << 1];
void init() {
  for (int i = 0; i < maxn << 1; i++)
    par[i] = i;
}

int Find(int x) { return par[x] == x ? x : par[x] = Find(par[x]); }
bool same(int x, int y) {
  int fx = Find(x), fy = Find(y);
  if (fx == fy)
    return true;
  else
    return false;
}
void unite(int x, int y) {
  int fx = Find(x), fy = Find(y);
  if (fx == fy)
    return;
  else {
    par[fx] = fy;
    return;
  }
}
bool cmp(road a, road b) { return a.cost > b.cost; }
double kruskal() {
  sort(G, G + len, cmp);
  init();
  double res = 0;
  int cnt = 1;
  for (int i = 0; i < len; i++) {
    road e = G[i];
    if (!same(e.u, e.v)) {
      unite(e.u, e.v);
      res += e.cost;
      cnt++;
    }
  }
  return res;
}
double dist(double x, double y, double u, double v) {
  return sqrt(abs(x - u) * abs(x - u) + abs(y - v) * abs(y - v));
}
set<pair<int, int>> st;
int main() {
  // freopen("out.txt", "w", stdout);
  while (~sdd(n, m)) {
    ms(G, 0);
    len = 0;
    int ta, tb;
    for (int i = 1; i <= n; i++) {
      sdd(arr[i][0], arr[i][1]);
    }
    double sum = 0;
    for (int i = 1; i <= m; i++) {
      sdd(ta, tb);
      if (!st.count(mp(ta, tb))) {
        G[len].u = ta;
        G[len].v = tb;
        G[len].cost = dist(arr[ta][0], arr[ta][1], arr[tb][0], arr[tb][1]);
        sum += G[len].cost;
        len++;
        st.insert(mp(ta, tb));
      }
    }
    double ans = sum - kruskal();
    printf("%.3f\\n", ans);
  }
  return 0;
}