Advertisement
Guest User

Untitled

a guest
Feb 18th, 2020
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define MAXN 101
  5.  
  6. int n , m ;
  7. int visited [MAXN] ;
  8. int parent [MAXN] ;
  9. set <int> different_parents ;
  10. vector <int> adj_list [MAXN] ;
  11. bool is_present [MAXN] ;
  12.  
  13. void dfs (int x , int *c)
  14. {
  15. *c += 1 ;
  16. visited[x] = 1 ;
  17.  
  18. for (int i = 0 ; i < adj_list[x].size() ; i++)
  19. {
  20. int v = adj_list[x][i] ;
  21.  
  22. if(visited[v] == -1)
  23. {
  24. visited[v] = visited[x] ;
  25. dfs(v , c) ;
  26. }
  27. }
  28. }
  29. void dfs_print (int x)
  30. {
  31. cout << x << " " ;
  32. visited[x] = 1 ;
  33.  
  34. for (int i = 0 ; i < adj_list[x].size() ; i++)
  35. {
  36. int v = adj_list[x][i] ;
  37.  
  38. if(visited[v] == -1)
  39. {
  40. visited[v] = visited[x] ;
  41. dfs_print(v) ;
  42. }
  43. }
  44. }
  45. int Find (int i)
  46. {
  47. return parent[i] == i ? i : parent[i] = Find(parent[i]) ;
  48. }
  49. void Union (int x , int y)
  50. {
  51. int xParent = Find(x) ;
  52. int yParent = Find(y) ;
  53.  
  54. parent[xParent] = yParent ;
  55. }
  56. void initialize ()
  57. {
  58. for (int i = 1 ; i <= m ; i++)
  59. {
  60. visited[i] = -1 ;
  61. parent[i] = i ;
  62. }
  63. }
  64. void sort_adj_list ()
  65. {
  66. for (int i = 1 ; i <= m ; i++)
  67. {
  68. sort (adj_list[i].begin() , adj_list[i].end()) ;
  69. }
  70. }
  71. bool search_galaxy (int num)
  72. {
  73. for (int i = 1 ; i <= m ; i++)
  74. {
  75. for (int j = 0 ; j < adj_list[i].size() ; j++)
  76. {
  77. if (adj_list[i][j] == num)
  78. {
  79. return false ;
  80. }
  81. }
  82. }
  83.  
  84. return true ;
  85. }
  86. int main ()
  87. {
  88. int a , b , v = 1 , u = INT_MIN , c = 0 ;
  89.  
  90. cin >> n >> m ;
  91.  
  92. initialize() ;
  93.  
  94. for (int i = 1 ; i <= m ; i++)
  95. {
  96. parent[i] = i ;
  97. is_present[i] = false ;
  98. }
  99.  
  100. for (int i = 1 ; i <= n ; i++)
  101. {
  102. cin >> a >> b ;
  103.  
  104. adj_list[a].push_back(b) ;
  105. adj_list[b].push_back(a) ;
  106.  
  107. Union (a , b) ;
  108.  
  109. is_present[a] = true ;
  110. is_present[b] = true ;
  111. }
  112.  
  113. for (int i = 1 ; i <= m ; i++)
  114. {
  115. if (is_present[i])
  116. {
  117. different_parents.insert(Find(i)) ;
  118. }
  119. }
  120.  
  121. cout << different_parents.size() << endl ;
  122.  
  123. sort_adj_list ();
  124.  
  125. for (int i = 1 ; i <= m ; i++)
  126. {
  127. initialize();
  128. c = 0 ;
  129. dfs(i , &c);
  130.  
  131. if (c > u)
  132. {
  133. u = c ;
  134. v = i ;
  135. }
  136. }
  137.  
  138. initialize();
  139. dfs_print(v);
  140. cout << endl ;
  141.  
  142. return 0;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement