Guest User

Untitled

a guest
Apr 22nd, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. /*
  2. * @author - Rahul Goswami
  3. * 15 Apr, 2018
  4. */
  5. #include<bits/stdc++.h>
  6. using namespace std;
  7. #define N 10
  8.  
  9. vector<int> adj[N];
  10. int max_distance, farthest_node;
  11. int parents[N];
  12.  
  13. // find farthest node
  14. int DFS(int source, int parent, int distance) {
  15. if (distance > max_distance) {
  16. max_distance = distance;
  17. farthest_node = source;
  18. }
  19. for (int child: adj[source]) {
  20. if (child != parent)
  21. DFS(child, source, distance + 1);
  22. }
  23. return farthest_node;
  24. }
  25.  
  26. // calculate array parents[N]
  27. void dfs(int source, int parent) {
  28. parents[source] = parent;
  29. for (int child: adj[source])
  30. if (child != parent)
  31. dfs(child, source);
  32. }
  33.  
  34. int main()
  35. {
  36. freopen("input.txt", "r", stdin);
  37. int a, b, node_a, node_b, temp;
  38.  
  39. for (int i=0; i<N-1; i++) {
  40. cin >> a >> b;
  41. adj[a].push_back(b);
  42. adj[b].push_back(a);
  43. }
  44.  
  45. max_distance = -1;
  46. node_a = DFS(1, -1, 0);
  47.  
  48. max_distance = -1;
  49. node_b = DFS(node_a, -1, 0);
  50.  
  51. dfs(node_a, -1);
  52.  
  53. unordered_set<int> diameter_set;
  54.  
  55. diameter_set.insert(node_b);
  56. temp = node_b;
  57. while (temp != node_a) {
  58. diameter_set.insert(parents[temp]);
  59. temp = parents[temp];
  60. }
  61.  
  62. unordered_set<int> external_nodes;
  63. for (int node=0; node<N; ++node) {
  64. if (diameter_set.count(node) == 0)
  65. external_nodes.insert(node);
  66. }
  67.  
  68. cout << "Minimum number of external nodes are: " << external_nodes.size();
  69. cout << "\nset 'external_nodes' contains these nodes:\n";
  70. for (int node: external_nodes)
  71. cout << node << " ";
  72. cout << "\nset 'diameter_set' contains these nodes:\n";
  73. for (int node: diameter_set)
  74. cout << node << " ";
  75. cout << "\n";
  76.  
  77. return 0;
  78. }
Add Comment
Please, Sign In to add comment