Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <functional>
- #include <algorithm>
- #include <iostream>
- #include <cstring>
- #include <cstdlib>
- #include <cassert>
- #include <sstream>
- #include <numeric>
- #include <string>
- #include <vector>
- #include <cstdio>
- #include <bitset>
- #include <cmath>
- #include <ctime>
- #include <queue>
- #include <stack>
- #include <map>
- #include <set>
- using namespace std;
- #define forit(it, s) for(__typeof(s.begin()) it = s.begin(); it != s.end(); it++)
- #define np(v) next_permutation(v.begin(), v.end())
- #define pll pair < long long, long long>
- #define all(a) a.begin(), a.end()
- #define ull unsigned long long
- #define pii pair < int, int >
- #define sz(a) (int)a.size()
- #define sqr(x) ((x) * (x))
- #define y1 stupid_cmath
- #define vi vector <int>
- #define pb push_back
- #define mp make_pair
- #define ll long long
- #define rank asdas
- #define f first
- #define s second
- const int inf = (int)3e6;
- const int mod = inf + 7;
- const double eps = 1e-9;
- const double pi = acos(-1.0);
- int n;
- char c;
- int p[100100];
- int rank[100100];
- int get(int v){
- if(v == p[v]) return v;
- return v = p[v];
- }
- void merge(int a, int b){
- a = get(a), b = get(b);
- if(a != b){
- if(rank[a] < rank[b]) swap(a, b);
- p[b] = a;
- rank[a] += rank[b];
- }
- }
- int main(){
- ios_base::sync_with_stdio(0), cin.tie(0);
- cin >> n;
- for(int i = 1; i <= n; ++i){
- p[i] = i;
- rank[i] = 1;
- }
- for(int i = 1, x, y; i <= n; ++i){
- cin >> c;
- if(c == 'M'){
- cin >> x >> y;
- merge(x, y);
- }else{
- cin >> x;
- cout << rank[get(x)] << "\n";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement