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: NovemNotes
Problemset: Tech Sprites
Language: cpp
Time: 0.633 second
Submitted On: 2026-04-24 15:20:52
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+2;
struct stc{
int a,b,c,d;
};
int n,m,gp,ans=0;
vector<pair<int,int>> v;
int head[N];
int grp[N];
vector<pair<int,int>> vp[N];
vector<stc> pv;
int findhead(int n){
return head[n]==n? n:head[n]=findhead(head[n]);
}
int main(){
ios_base::sync_with_stdio(false);cin.tie(NULL);
cin >> n >> m;v.resize(n+1);gp=n;
for(int i=1;i<=n;i++)head[i]=i;
for(int i=1;i<=n;i++){
cin >> v[i].first >> v[i].second;
}
while(m--){
int a,b;cin >> a >> b;
int ha=findhead(a),hb=findhead(b);
if(ha==hb)continue;
head[ha]=hb;
gp--;
}
int g=0;
for(int i=1;i<=n;i++){
int hi = findhead(i);
if(!grp[hi]){
grp[i]=grp[hi]=++g;
}else{
grp[i]=grp[hi];
}
vp[grp[i]].emplace_back(v[i]);
}
for(int i=1;i<=gp;i++){
sort(vp[i].begin(),vp[i].end(),[](const pair<int,int> &a,const pair<int,int> &b){
if(a.first==b.first)return a.second<b.second;
return a.first<b.first;
});
int np = vp[i].size();
pv.push_back({vp[i][0].first,vp[i][0].second,vp[i][np-1].first,vp[i][np-1].second});
}
sort(pv.begin(),pv.end(),[](const stc &a,const stc&b){
if(a.a==b.a)return a.b < b.b;
return a.a < b.a;
});
pair<int,int> last;
for(int i=0;i<pv.size();i++){
auto [a,b,c,d]=pv[i];
// cout << "("<<a<<","<<b<<") ("<<c<<","<<d<<")\n";
if(i==0)last={c,d};
else{
if(a<last.first||(a==last.first && b<last.second)){
ans++;
if(c>last.first||(c==last.first && d>last.second)){
last={c,d};
}
}else{
last = {c,d};
}
}
}
cout << ans << "\n";
return 0;
}