Submission

Status:

(PP-SSS)(-SSSSS)(TSSSSS)(-SSSSSSS)(TSSSSS)(TSSSSSSSSSSSS)

Subtask/Task Score:

{0/13}{0/11}{0/10}{0/16}{0/18}{0/32}

Score: 0

User: .n0t_gloomy.

Problemset: Tech Sprites

Language: cpp

Time: 2.607 second

Submitted On: 2026-03-12 15:53:03

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define n0t_gloomy ios_base::sync_with_stdio(false); cin.tie(nullptr);
int findpar(int n, vector<int> &par)
{
    if (n == par[n]) return n;
    return par[n] = findpar(par[n],par);
}
signed main()
{
    n0t_gloomy;
    int n,m;
    cin>>n>>m;

    map<int,pii> old;
    map<pii,int> newmap;
    vector<pii> v(n);
    
    for (int i = 0; i < n; i++)
    {
        int a,b;
        cin>>a>>b;
        pii tmp = {a,b};
        old[i] = tmp;
        v[i] = tmp;
    }
    sort(v.begin(),v.end());
    for (int i = 0; i < n; i++)
    {
        newmap[v[i]] = i;
    }
    vector<vector<int>> adj(n);
    vector<int> par(n);
    iota(par.begin(),par.end(),0);
    for (int i = 0; i < m; i++)
    {
        int u,v;
        cin>>u>>v;
        u--; v--;
        pii tmp = old[u];
        int newu = newmap[tmp];
        tmp = old[v];
        int newv = newmap[tmp];
        adj[newu].push_back(newv);
        adj[newv].push_back(newu);
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < adj[i].size(); j++)
        {
            int ru = findpar(i,par);
            int rv = findpar(adj[i][j],par);
            if (ru != rv) par[rv] = ru;
        }
    }
    // cout<<"parents : ";
    // for (auto it : par) cout<<it<<" ";
    // cout<<"\n";
    int ans = 0;
    set<int> st;
    for (int i = 0; i < n; i++)
    {
        st.insert(findpar(i, par));
    }
    for (int i = 0; i < n-1; i++)
    {
        if (par[i] != par[i+1]) ans++;
    }
    cout<<ans-st.size()+1<<"\n";
}