fork(1) download
  1. #include <stdio.h>
  2.  
  3. #define N 200005
  4.  
  5. int parent[N], size[N];
  6.  
  7. int find(int x) {
  8. if (x != parent[x])
  9. parent[x] = find(parent[x]);
  10. return parent[x];
  11. }
  12.  
  13. int unite(int x, int y) {
  14. x = find(x);
  15. y = find(y);
  16. if (x == y) return 0;
  17. if (size[x] < size[y]) {
  18. int temp = x;
  19. x = y;
  20. y = temp;
  21. }
  22. parent[y] = x;
  23. size[x] += size[y];
  24. return 1;
  25. }
  26.  
  27. void solve() {
  28. int n;
  29. scanf("%d", &n);
  30.  
  31. for (int i = 0; i < N; ++i) {
  32. parent[i] = i;
  33. size[i] = 1;
  34. }
  35.  
  36. int s_indices[N], s_count = 0;
  37.  
  38. for (int i = 0; i < n; ++i) {
  39. int u, v;
  40. scanf("%d %d", &u, &v);
  41. if (unite(u, v)) {
  42. s_indices[s_count++] = i + 1;
  43. }
  44. }
  45.  
  46. printf("%d\n", s_count);
  47. for (int i = 0; i < s_count; ++i)
  48. printf("%d ", s_indices[i]);
  49. printf("\n");
  50. }
  51.  
  52. int main() {
  53. int t;
  54. scanf("%d", &t);
  55. while (t--) {
  56. solve();
  57. }
  58. return 0;
  59. }
  60.  
Success #stdin #stdout 0.01s 5320KB
stdin
2
1
1 2
4
1 2
2 3
1 3
3 5
stdout
1
1 
3
1 2 4