- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
C++ program to find out the maximum sum of a minimally connected graph
Suppose, we are given a minimally connected graph. That means removing any edge will make the graph disconnected. The graph has n vertices and the edges are given in an array 'edges'. There is also an array 'vertexValues' given to us that contain n integer values.
Now, we do the following −
We write a positive integer on each of the vertices and then try to calculate a score.
There is an edge connecting two vertices, we put the smaller value of the two vertices on the edges.
We calculate the score by adding all the edge values.
We have to find the maximum value that can be achieved by putting the values on the vertices. We have to print the maximum total value and the values to be written on the vertices.
So, if the input is like n = 6, edges = {{1, 2}, {2, 3}, {2, 4}, {4, 5}, {3, 6}}, vertexValues = {1, 2, 3, 4, 5, 6}, then the output will be 15, 3 1 2 4 5 6, because we can put the values on the vertices from 0 to n – 1 in the given way 3 1 2 4 5 6.
To solve this, we will follow these steps −
N := 100 Define arrays seq and res of size N. Define an array tp of size N. ans := 0 Define a function dfs(), this will take p, q, res[p] := seq[c] if p is not equal to 0, then: ans := ans + seq[c] (decrease c by 1) for each value x in tp[p], do: if x is not equal to q, then: dfs(x, p) for initialize i := 0, when i + 1 < n, update (increase i by 1), do: tmp := first value of edges[i]- 1 temp := second value of edges[i] - 1 insert temp at the end of tp[tmp] insert tmp at the end of tp[temp] for initialize i := 0, when i < n, update (increase i by 1), do: seq[i] := vertexValues[i] c := n - 1 sort the array seq dfs(0, 0) print(ans) for initialize i := n - 1, when i >= 0, update (decrease i by 1), do: print(res[i])
Example
Let us see the following implementation to get better understanding −
#include <bits/stdc++.h> using namespace std; const int INF = 1e9; #define N 100 int seq[N], res[N]; vector<int> tp[N]; int ans = 0, c; void dfs(int p, int q) { res[p] = seq[c]; if(p != 0) ans += seq[c]; c--; for(auto x : tp[p]) { if(x != q) dfs(x, p); } } void solve(int n, vector<pair<int,int>> edges, int vertexValues[]){ for(int i = 0; i + 1 < n; i++) { int tmp = edges[i].first - 1; int temp = edges[i].second - 1; tp[tmp].push_back(temp); tp[temp].push_back(tmp); } for(int i = 0; i < n; i++) seq[i] = vertexValues[i]; c = n - 1; sort(seq, seq + n); dfs(0, 0); cout << ans << endl; for(int i = n - 1; i >= 0; i--) cout << res[i] << " "; cout << endl; } int main() { int n = 6; vector<pair<int,int>> edges = {{1, 2}, {2, 3}, {2, 4}, {4, 5},{3, 6}}; int vertexValues[] = {1, 2, 3, 4, 5, 6}; solve(n, edges, vertexValues); return 0; }
Input
6, {{1, 2}, {2, 3}, {2, 4}, {4, 5}, {3, 6}}, {1, 2, 3, 4, 5, 6}
Output
15 3 1 2 4 5 6
- Related Articles
- C++ Program to Find the Connected Components of an UnDirected Graph
- C++ Program to find out the maximum amount of score that can be decreased from a graph
- C++ Program to Find the Maximum Cut in a Graph
- C++ Program to find out the super vertices in a graph
- Program to find out the sum of the maximum subarray after a operation in Python
- C++ program to find out the maximum value of i
- Program to find out the sum of minimum cost within a graph among all vertices in Python
- C++ Program to find out the number of bridge edges in a given graph
- C++ Program to find out the maximum rated parts set
- C++ Program to Check Whether it is Weakly Connected or Strongly Connected for a Directed Graph
- C++ program to find maximum possible value of XORed sum
- C++ Program to Check Whether a Graph is Strongly Connected or Not
- Find the maximum value permutation of a graph in C++
- C++ program to find out the maximum possible tally from given integers
- Sum of the minimum elements in all connected components of an undirected graph in C++
