Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <cstdio>
- #include <vector>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- struct UnionFind{
- vector<int> parents;
- int uniqueAreas;
- UnionFind(int n) : parents(n), uniqueAreas(n){
- for(int i = 0; i < n; i++)
- parents[i] = i;
- }
- int getParent(int n){
- if(parents[n] == n)
- return n;
- return parents[n] = getParent(parents[n]);
- }
- void unite(int a, int b){
- int parentA = getParent(a);
- int parentB = getParent(b);
- if(parentA == parentB)
- return;
- uniqueAreas--;
- parents[parentA] = parentB;
- }
- };
- int play(){
- int x, y,a,b;
- cin >> x >> y;
- UnionFind uf(x);
- for(int i = 0; i < y; i++) {
- cin >>a >> b;
- uf.unite(a, b);
- }
- return uf.uniqueAreas;
- }
- int main() {
- int t;
- cin >> t;
- for(int i = 0; i < t; i++){
- cout << play() << " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment