Dado un árbol, y los pesos de todos los Nodes y un número entero X , la tarea es contar todos los Nodes i tal que (peso[i] + X) sea un número de Fibonacci .
Primero, algunos números de Fibonacci son:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 141, …
Ejemplos:
Aporte:
X = 5
Salida: 2
Solo los Nodes 3 y 5 dan un número de fibonacci cuando se les suma 5.
es decir, (3 + 5) = 8 y (16 + 5) = 21 son números de Fibonacci.
Planteamiento: Realice dfs en el árbol y cuente todos los Nodes suma de cuyo peso con x es un número de Fibonacci.
A continuación se muestra la implementación del enfoque anterior:
C++
// 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; }
Java
// Java implementation of the // above approach import java.util.*; @SuppressWarnings("unchecked") class GFG{ static int ans = 0, x; static ArrayList []graph = new ArrayList[100]; static ArrayList weight = new ArrayList(); // Function that returns true if // x is a perfect square static boolean isPerfectSquare(double x) { // Find floating point value of // square root of x double sr = Math.sqrt(x); // If square root is an integer return ((sr - Math.floor(sr)) == 0); } // Function that returns true // if n is a fibonacci number static boolean isFibonacci(int n) { return isPerfectSquare(5 * n * n + 4) || isPerfectSquare(5 * n * n - 4); } // Function to perform dfs static void dfs(int node, int parent) { // If weight of the current node // gives a fibonacci number // when x is added to it if (isFibonacci((int)weight.get(node) + x)) ans += 1; for(int to : (ArrayList<Integer>)graph[node]) { if (to == parent) continue; dfs(to, node); } } // Driver Code public static void main(String[] args) { x = 5; for(int i = 0; i < 100; i++) { weight.add(0); graph[i] = new ArrayList(); } // Weights of the node weight.add(1, 4); weight.add(2, 5); weight.add(3, 3); weight.add(4, 25); weight.add(5, 16); weight.add(6, 34); // Edges of the tree graph[1].add(2); graph[2].add(3); graph[2].add(4); graph[1].add(5); graph[5].add(6); dfs(1, 1); System.out.println(ans); } } // This code is contributed by pratham76
Python3
# Python3 implementation of the approach import math ans, x = 0, 0 graph = [[] for i in range(100)] weight = [0]*(100) # Function that returns true if # x is a perfect square def isPerfectSquare(x): # Find floating point value of # square root of x sr = math.sqrt(x); # If square root is an integer return ((sr - math.floor(sr)) == 0) # Function that returns true # if n is a fibonacci number def isFibonacci(n): return isPerfectSquare(5 * n * n + 4) or isPerfectSquare(5 * n * n - 4) # Function to perform dfs def dfs(node, parent): global ans # If weight of the current node # gives a fibonacci number # when x is added to it if (isFibonacci(weight[node] + x)): ans += 1 for to in graph[node]: if (to == parent): continue dfs(to, node) 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].append(2) graph[2].append(3) graph[2].append(4) graph[1].append(5) graph[5].append(6) dfs(1, 1) print(ans) # This code is contributed by divyesh072019.
C#
// C# implementation of the // above approach using System; using System.Collections; class GFG{ static int ans = 0, x; static ArrayList []graph = new ArrayList[100]; static ArrayList weight = new ArrayList(); // Function that returns true if // x is a perfect square static bool isPerfectSquare(double x) { // Find floating point value of // square root of x double sr = Math.Sqrt(x); // If square root is an integer return ((sr - Math.Floor(sr)) == 0); } // Function that returns true // if n is a fibonacci number static bool isFibonacci(int n) { return isPerfectSquare(5 * n * n + 4) || isPerfectSquare(5 * n * n - 4); } // Function to perform dfs static void dfs(int node, int parent) { // If weight of the current node // gives a fibonacci number // when x is added to it if (isFibonacci((int)weight[node] + x)) ans += 1; foreach (int to in graph[node]) { if (to == parent) continue; dfs(to, node); } } // Driver Code public static void Main(string[] args) { x = 5; for(int i = 0; i < 100; i++) { weight.Add(0); graph[i] = new ArrayList(); } // 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].Add(2); graph[2].Add(3); graph[2].Add(4); graph[1].Add(5); graph[5].Add(6); dfs(1, 1); Console.Write(ans); } } // This code is contributed by rutvik_56
Javascript
<script> // JavaScript implementation of the // above approach var ans = 0, x; var graph = Array.from(Array(100), ()=>Array()); var weight = []; // Function that returns true if // x is a perfect square function isPerfectSquare(x) { // Find floating point value of // square root of x var sr = Math.sqrt(x); // If square root is an integer return ((sr - Math.floor(sr)) == 0); } // Function that returns true // if n is a fibonacci number function isFibonacci(n) { return isPerfectSquare(5 * n * n + 4) || isPerfectSquare(5 * n * n - 4); } // Function to perform dfs function dfs(node, 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(var to of graph[node]) { if (to == parent) continue; dfs(to, node); } } // Driver Code x = 5; for(var i = 0; i < 100; i++) { weight.push(0); graph[i] = []; } // 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(2); graph[2].push(3); graph[2].push(4); graph[1].push(5); graph[5].push(6); dfs(1, 1); document.write(ans); </script>
2
Publicación traducida automáticamente
Artículo escrito por SURENDRA_GANGWAR y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA