Submission

Status:

(-SSSSS)(-SSSSS)(-SSSSS)(-SSSSSSS)(-SSSSS)(-SSSSSSSSSSSS)

Subtask/Task Score:

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

Score: 0

User: qweqwe

Problemset: Tech Sprites

Language: cpp

Time: 0.443 second

Submitted On: 2026-03-25 17:56:27

#include <bits/stdc++.h>
#define qweqwe cin.tie(0)->sync_with_stdio(0)
using namespace std;
using ll = long long;
using pii = pair<ll,ll>;
using db = long double;

vector<int> parent(1000001);

int find(int n){
	if (parent[n]==n) return n;
	return parent[n]=find(parent[n]);
}

int main(){
	qweqwe;
	int n,m;cin >> n >> m;
	parent.resize(n+1);
	iota(parent.begin(),parent.end(),0);
	vector<pii> arr(n);
	
	for (int i=0;i<n;i++){
		cin >> arr[i].first >> arr[i].second;
	}
	
	for (int i=0;i<m;i++){
		int u,v;cin >> u >> v;
		int pu=find(u),pv=find(v);
		if (pu!=pv){
			parent[pv]=parent[pu];
		}
	}
	unordered_set<int> u;
	for (int i=1;i<=n;i++){
		u.insert(parent[i]);
	}cout << u.size()-1;
	
	/*
	unordered_map<int,vector<pii>> pos;
	for (int i=1;i<=n;i++){
		pos[parent[i]].push_back(arr[i-1]);
	}
	int mx=0,idx=-1;
	for (pair<int,vector<pii>> i:pos){
		if (mx < i.second.size()){
			mx=i.second.size();idx=i.first;
		}
		sort(pos[i.first].begin(),pos[i.first].end());
	}
	int cnt=0;
	/*
	for (pair<int,vector<pii>> i:pos){
		cout << i.first << "\n";
		for (pii j:i.second){
			cout << j.first << " " << j.second << '\n';
		}cout << "\n--------------\n";
	}
	*/
	/*
	for (pair<int,vector<pii>> i:pos){
		if (idx==i.first) continue;
		pii t=i.second[0],w=i.second[i.second.size()-1];
		
		if (t.first>pos[idx][pos[idx].size()-1].first || 
		   (t.first==pos[idx][pos[idx].size()-1].first && 
		    t.second>=pos[idx][pos[idx].size()-1].second)){
			continue;	
		}else if (w.first<pos[idx][0].first || 
		   		 (w.first==pos[idx][0].first && 
		    	  w.second>=pos[idx][0].second)){
		    continue;
		}
		else cnt++;
	}cout << cnt;
	*/
	return 0;
}