Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * @author - Rahul Goswami
- * 15 Apr, 2018
- */
- #include<bits/stdc++.h>
- using namespace std;
- #define N 10
- vector<int> adj[N];
- int max_distance, farthest_node;
- int parents[N];
- // find farthest node
- int DFS(int source, int parent, int distance) {
- if (distance > max_distance) {
- max_distance = distance;
- farthest_node = source;
- }
- for (int child: adj[source]) {
- if (child != parent)
- DFS(child, source, distance + 1);
- }
- return farthest_node;
- }
- // calculate array parents[N]
- void dfs(int source, int parent) {
- parents[source] = parent;
- for (int child: adj[source])
- if (child != parent)
- dfs(child, source);
- }
- int main()
- {
- freopen("input.txt", "r", stdin);
- int a, b, node_a, node_b, temp;
- for (int i=0; i<N-1; i++) {
- cin >> a >> b;
- adj[a].push_back(b);
- adj[b].push_back(a);
- }
- max_distance = -1;
- node_a = DFS(1, -1, 0);
- max_distance = -1;
- node_b = DFS(node_a, -1, 0);
- dfs(node_a, -1);
- unordered_set<int> diameter_set;
- diameter_set.insert(node_b);
- temp = node_b;
- while (temp != node_a) {
- diameter_set.insert(parents[temp]);
- temp = parents[temp];
- }
- unordered_set<int> external_nodes;
- for (int node=0; node<N; ++node) {
- if (diameter_set.count(node) == 0)
- external_nodes.insert(node);
- }
- cout << "Minimum number of external nodes are: " << external_nodes.size();
- cout << "\nset 'external_nodes' contains these nodes:\n";
- for (int node: external_nodes)
- cout << node << " ";
- cout << "\nset 'diameter_set' contains these nodes:\n";
- for (int node: diameter_set)
- cout << node << " ";
- cout << "\n";
- return 0;
- }
Add Comment
Please, Sign In to add comment