Count the nodes whose sum with X is a Fibonacci number
Given a tree, and the weights of all the nodes and an integer X, the task is to count all the nodes i such that (weight[i] + X) is a Fibonacci Number.
First few fibonacci numbers are:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 141, …
Examples:
Input:
X = 5
Output: 2
Only the nodes 3 and 5 give a fibonacci number when 5 is added to them.
i.e. (3 + 5) = 8 and (16 + 5) = 21 are both Fibonacci numbers.
Approach: Perform dfs on the tree and count all the nodes sum of whose weight with x is a fibonacci number.
Below is the implementation of the above approach:
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; int ans = 0, x; vector< int > graph[100]; vector< int > weight(100); // Function that returns true if // x is a perfect square bool isPerfectSquare( long double x) { // Find floating point value of // square root of x long double sr = sqrt (x); // If square root is an integer return ((sr - floor (sr)) == 0); } // Function that returns true // if n is a fibonacci number bool isFibonacci( int n) { return isPerfectSquare(5 * n * n + 4) || isPerfectSquare(5 * n * n - 4); } // Function to perform dfs void dfs( int node, int parent) { // If weight of the current node // gives a fibonacci number // when x is added to it if (isFibonacci(weight[node] + x)) ans += 1; for ( int to : graph[node]) { if (to == parent) continue ; dfs(to, node); } } // Driver code int main() { x = 5; // Weights of the node weight[1] = 4; weight[2] = 5; weight[3] = 3; weight[4] = 25; weight[5] = 16; weight[6] = 34; // Edges of the tree graph[1].push_back(2); graph[2].push_back(3); graph[2].push_back(4); graph[1].push_back(5); graph[5].push_back(6); dfs(1, 1); cout << ans; return 0; } |
2
Recommended Posts:
- Count of cells in a matrix which give a Fibonacci number when the count of adjacent cells is added
- Given a n-ary tree, count number of nodes which have more number of children than parents
- Count the number of non-reachable nodes
- Count all pairs of adjacent nodes whose XOR is an odd number
- Count the number of nodes at given level in a tree using BFS.
- Count the number of nodes at a given level in a tree using DFS
- Check if a M-th fibonacci number divides N-th fibonacci number
- Count the nodes of the tree which make a pangram when concatenated with the sub-tree nodes
- Print levels with odd number of nodes and even number of nodes
- Count Fibonacci numbers in given range in O(Log n) time and O(1) space
- Number of ways to represent a number as sum of k fibonacci numbers
- Finding number of digits in n'th Fibonacci number
- Nth XOR Fibonacci number
- Nth Even Fibonacci Number
- Count BST nodes that lie in a given range
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.