>>108695494
In C:
int removeStones(int** sa, int sz, int*) {
int g[20002] = {};
int v[1001]; int vz = 0;
for (int si = 0; si < sz; ++si) {
const int x = sa[si][0], y = sa[si][1] + 10001;
const int gx = g[x], gy = g[y];
if (gx == gy) {
if (!gx) v[vz] = vz, g[x] = g[y] = ++vz;
} else if (!gx) {
g[x] = gy;
} else if (!gy) {
g[y] = gx;
} else {
const int a = v[gx - 1], b = v[gy - 1];
if (a == b) continue;
int min = a, max = b;
if (a > b) min = b, max = a;
for (int i = 0; i < vz; ++i)
if (v[i] == max) v[i] = min;
}
}
for (int i = 0; i < sz; ++i) g[i] = 0;
for (int i = 0; i < vz; ++i) sz -= ++g[v[i]] == 1;
return sz;
}