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: navysrimuang
Problemset: Tech Sprites
Language: cpp
Time: 0.565 second
Submitted On: 2026-04-10 21:15:41
#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<int> par,sz;
int find(int x){
if(par[x] == x) return x;
else return par[x] = find(par[x]);
}
bool unite(int a, int b){
int ra = find(a);
int rb = find(b);
if(ra == rb) return 0;
if(ra < rb) swap(ra,rb);
par[rb] = ra;
sz[ra] += sz[rb];
return 1;
}
int main(){
cin.tie(0)->sync_with_stdio(0);
cin >> n >> m;
par.resize(n+1);
iota(par.begin(), par.end() , 0);
sz.resize(n+1,1);
vector<tuple<int,int,int>> iden; //a , b, id
for(int i = 1;i<=n;i++){
int a,b;
cin >> a >> b;
iden.push_back({a,b,i});
}
for(int i = 0;i<m;i++){
int a,b;
cin >> a >> b;
unite(a,b);
}
sort(iden.begin() , iden.end());
int cnt = 0;
for(int i = 0;i<n;i++){
auto [a,b,x] = iden[i];
if(!i){
sz[find(x)]--;
continue;
}
auto [l,r,y] = iden[i-1];
if(sz[find(y)] != 0 && unite(x,y)){
cnt++;
}
sz[find(x)]--;
}
cout << cnt << "\n";
return 0;
}