Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.06 KB | None | 0 0
  1. #include <fstream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <queue>
  6. using namespace std;
  7.  
  8. ifstream cin("prob5.in");
  9. ofstream cout("prob5.out");
  10.  
  11. int n, m, comp, Max, Nod, minNod = 100000, maxNod, k, ans;
  12. vector<int> a[100010], need;
  13. bool viz[100010];
  14. queue<int> q;
  15.  
  16. void dfs(int nod, bool write = 0) {
  17. need.push_back(nod);
  18. k++;
  19. if(write)
  20. cout << nod << ' ';
  21. viz[nod] = 1;
  22. for(int i=0; i<a[nod].size(); i++)
  23. if(!viz[a[nod][i]])
  24. dfs(a[nod][i], write);
  25. }
  26.  
  27. void bfs(int nod) {
  28. cout << nod << ' ';
  29. viz[nod] = 1;
  30. q.push(nod);
  31. while(!q.empty()) {
  32. nod = q.front();
  33. q.pop();
  34. for(auto &x: a[nod])
  35. if(!viz[x])
  36. viz[x] = 1,
  37. cout << x << ' ',
  38. q.push(x);
  39. }
  40. }
  41.  
  42. int main() {
  43. cin >> n >> m;
  44. while(m--) {
  45. int x, y;
  46. cin >> x >> y;
  47. a[x].push_back(y);
  48. a[y].push_back(x);
  49. }
  50.  
  51. //--------------------------------------------------------------------------------
  52.  
  53. cout << "DFS:\n";
  54. for(int i=1; i<=n; i++)
  55. if(!viz[i])
  56. dfs(i, 1),
  57. comp++,
  58. cout << '\n';
  59. cout << "Nr de comp conexe: " << comp << "\n\n";
  60.  
  61. //--------------------------------------------------------------------------------
  62.  
  63. cout << "BFS:\n";
  64. for(int i=1; i<=n; i++)
  65. viz[i] = 0,
  66. Max = max(Max, int(a[i].size()));
  67.  
  68. for(int i=1; i<=n; i++)
  69. if(!viz[i])
  70. bfs(i),
  71. cout << '\n';
  72. cout << '\n';
  73.  
  74. //--------------------------------------------------------------------------------
  75.  
  76. cout << "Gradul MAX: " << Max << '\n';
  77. cout << "Nodurile cu gradul MAX: ";
  78. for(int i=1; i<=n; i++)
  79. if(a[i].size() == Max)
  80. cout << i << ' ';
  81. cout << '\n';
  82.  
  83. for(int i=1; i<=n; i++)
  84. viz[i] = 0;
  85.  
  86. //--------------------------------------------------------------------------------
  87.  
  88. for(int i=1; i<=n; i++)
  89. if(!viz[i])
  90. k = 0,
  91. dfs(i),
  92. maxNod = max(maxNod, k),
  93. minNod = min(minNod, k);
  94.  
  95. for(int i=1; i<=n; i++)
  96. viz[i] = 0;
  97.  
  98. cout << '\n';
  99.  
  100. //--------------------------------------------------------------------------------
  101.  
  102. cout << "Grad MIN al comp conexe: " << minNod << '\n';
  103.  
  104. for(int i=1; i<=n; i++)
  105. if(!viz[i]) {
  106. k = 0,
  107. dfs(i);
  108. if(k == minNod)
  109. ans++;
  110. }
  111. cout << "Nr de comp conexe cu grad MIN: " << ans << '\n';
  112.  
  113. for(int i=1; i<=n; i++)
  114. viz[i] = 0;
  115.  
  116. cout << '\n';
  117.  
  118. //--------------------------------------------------------------------------------
  119.  
  120. cout << "Grad MAX al comp conexe: " << maxNod << '\n';
  121. ans = 0;
  122. for(int i=1; i<=n; i++)
  123. if(!viz[i]) {
  124. k = 0,
  125. dfs(i);
  126. if(k == maxNod)
  127. ans++;
  128. }
  129. cout << "Nr de comp conexe cu grad MAX: " << ans << '\n';
  130.  
  131. for(int i=1; i<=n; i++)
  132. viz[i] = 0;
  133.  
  134. cout << '\n';
  135.  
  136. //--------------------------------------------------------------------------------
  137.  
  138. cout << "Componentele cu grad maxim:\n";
  139. for(int i=1; i<=n; i++)
  140. if(!viz[i]) {
  141. need.clear(),
  142. k = 0,
  143. dfs(i);
  144. if(k == maxNod) {
  145. for(auto &x: need)
  146. cout << x << ' ';
  147. cout << '\n';
  148. }
  149. }
  150. return 0;
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement