main.cc 866 B

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