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';
}