Submission
Status:
(PPPPPP)(PPPPPP)(PPPPPP)(PPPPPPPP)(PPPPPP)(PPPPPPPPPPPPP)
Subtask/Task Score:
{13/13}{11/11}{10/10}{16/16}{18/18}{32/32}
Score: 100
User: PakinDioxide
Problemset: Tech Sprites
Language: cpp
Time: 0.647 second
Submitted On: 2025-09-24 16:56:58
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int mxN = 1e6+5;
int n, m, par[mxN], vis[mxN], co[mxN], A[mxN];
tuple <ll, ll, int> a[mxN];
int fi(int x) {
if (x == par[x]) return x;
return par[x] = fi(par[x]);
}
int main() {
ios::sync_with_stdio(0), cin.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) par[i] = i, co[i] = 1;
for (int i = 1; i <= n; i++) {
ll x, y; cin >> x >> y;
a[i] = make_tuple(x, y, i);
}
for (int i = 0; i < m; i++) {
int u, v; cin >> u >> v;
if (fi(u) == fi(v)) continue;
co[fi(v)] += co[fi(u)];
par[fi(u)] = fi(v);
}
sort(a+1, a+n+1);
for (int i = 1; i <= n; i++) A[i] = get<2>(a[i]);
int cnt = 0;
for (int i = 1; i <= n; i++) {
int l = i, c = 0;
while (c != co[fi(A[i])]) {
// cout << "I " << i << ' ' << c << ' ' << co[fi(A[i])] << '\n';
if (fi(A[i]) != fi(A[l])) co[fi(A[i])] += co[fi(A[l])], par[fi(A[l])] = fi(A[i]), cnt++;
c++;
l++;
}
i = l-1;
}
cout << cnt << '\n';
}