main.cc 802 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include <cstdio>
  2. using namespace std;
  3. const int N = 30000;
  4. struct UF {
  5. int id[N + 1];
  6. int sz[N + 1];
  7. int ud[N + 1];
  8. };
  9. UF uf;
  10. int find(int i) {
  11. if (i == uf.id[i]) return i;
  12. int j = find(uf.id[i]);
  13. uf.ud[i] += uf.ud[uf.id[i]];
  14. uf.id[i] = j;
  15. return j;
  16. }
  17. void move(int i, int j) {
  18. i = find(i);
  19. j = find(j);
  20. if (i == j) return;
  21. uf.ud[i] = uf.sz[j];
  22. uf.id[i] = j;
  23. uf.sz[j] += uf.sz[i];
  24. }
  25. int main() {
  26. int p;
  27. scanf("%d", &p);
  28. for (int i = 1; i <= N; i++) {
  29. uf.id[i] = i;
  30. uf.sz[i] = 1;
  31. uf.ud[i] = 0;
  32. }
  33. char op[2];
  34. for (int i = 0, x, y; i < p; i++) {
  35. scanf("%s", op);
  36. if (op[0] == 'C') {
  37. scanf("%d", &x);
  38. find(x);
  39. printf("%d\n", uf.ud[x]);
  40. } else {
  41. scanf("%d %d", &x, &y);
  42. move(x, y);
  43. }
  44. }
  45. return 0;
  46. }