Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 100 * 100 * 10 + 5;
- int parent[N], size1[N];
- vector< vector < int > > v(20);
- void make_set(int n, int x = 1){
- if(x > n)return;
- parent[x] = x;
- make_set(n, x + 1);
- }
- int find(int x){
- while(x != parent[x])x = parent[x];
- return x;
- }
- void merge_set(int x, int y){
- int rep_x = find(x);
- int rep_y = find(y);
- if(rep_y == rep_x)return;
- if(size1[rep_x] > size1[rep_y]){
- parent[rep_y] = rep_x;
- size1[rep_x] += size1[rep_y];
- }
- else {
- parent[rep_x] = rep_y;
- size1[rep_y] += size1[rep_x];
- }
- }
- int main()
- {
- char ch;int x, y, n, q, child;
- scanf("%d %d", &n, &q);
- make_set(n);
- for(int i = 1; i <= n; i++)size1[i] = 1;
- //for(int i = 1; i < 4; i++)cout << size1[i] << ' ';
- //for(int i = 1; i < 4; i++)cout << parent[i] << ' ';
- for(int i=0; i<q; i++) {
- cin >> ch;
- if(ch == 'Q'){
- cin >> child;
- cout << size1[find(child)] << '\n';
- }
- else{
- cin >> x >> y;
- merge_set(x, y);
- }
- }
- // for(int i=1; i<=n; i++) if(!seen[i]) dfs(i);
- return 0;
- }
Add Comment
Please, Sign In to add comment