图中的依赖总和
给定一个有 n 个节点的有向连通图。如果从 u 到 v 有一条边,那么 u 依赖于 v。我们的任务是找出每个节点的依赖关系之和。
例子:
对于图中的图形,
A 取决于 C 和 D 即 2
B 取决于 C 即 1
D 取决于 C 即 1
而 C 不依赖于任何东西。
因此答案 -> 0 + 1 + 1 + 2 = 4
提问:Flipkart 采访
想法是检查邻接列表并找出每个顶点有多少条边并返回边的总数。
C++
// C++ program to find the sum of dependencies
#include
using namespace std;
// To add an edge
void addEdge(vector adj[], int u,int v)
{
adj[u].push_back(v);
}
// find the sum of all dependencies
int findSum(vector adj[], int V)
{
int sum = 0;
// just find the size at each vector's index
for (int u = 0; u < V; u++)
sum += adj[u].size();
return sum;
}
// Driver code
int main()
{
int V = 4;
vectoradj[V];
addEdge(adj, 0, 2);
addEdge(adj, 0, 3);
addEdge(adj, 1, 3);
addEdge(adj, 2, 3);
cout << "Sum of dependencies is "
<< findSum(adj, V);
return 0;
}
Java
// Java program to find the sum of dependencies
import java.util.Vector;
class Test
{
// To add an edge
static void addEdge(Vector adj[], int u,int v)
{
adj[u].addElement((v));
}
// find the sum of all dependencies
static int findSum(Vector adj[], int V)
{
int sum = 0;
// just find the size at each vector's index
for (int u = 0; u < V; u++)
sum += adj[u].size();
return sum;
}
// Driver method
public static void main(String[] args)
{
int V = 4;
@SuppressWarnings("unchecked")
Vector adj[] = new Vector[V];
for (int i = 0; i < adj.length; i++) {
adj[i] = new Vector<>();
}
addEdge(adj, 0, 2);
addEdge(adj, 0, 3);
addEdge(adj, 1, 3);
addEdge(adj, 2, 3);
System.out.println("Sum of dependencies is " +
findSum(adj, V));
}
}
// This code is contributed by Gaurav Miglani
Python3
# Python3 program to find the sum
# of dependencies
# To add an edge
def addEdge(adj, u, v):
adj[u].append(v)
# Find the sum of all dependencies
def findSum(adj, V):
sum = 0
# Just find the size at each
# vector's index
for u in range(V):
sum += len(adj[u])
return sum
# Driver code
if __name__=='__main__':
V = 4
adj = [[] for i in range(V)]
addEdge(adj, 0, 2)
addEdge(adj, 0, 3)
addEdge(adj, 1, 3)
addEdge(adj, 2, 3)
print("Sum of dependencies is",
findSum(adj, V))
# This code is contributed by rutvik_56
C#
// C# program to find the sum of dependencies
using System;
using System.Collections;
class GFG{
// To add an edge
static void addEdge(ArrayList []adj, int u,
int v)
{
adj[u].Add(v);
}
// Find the sum of all dependencies
static int findSum(ArrayList []adj, int V)
{
int sum = 0;
// Just find the size at each
// vector's index
for(int u = 0; u < V; u++)
sum += adj[u].Count;
return sum;
}
// Driver code
public static void Main(string[] args)
{
int V = 4;
ArrayList []adj = new ArrayList[V];
for(int i = 0; i < V; i++)
{
adj[i] = new ArrayList();
}
addEdge(adj, 0, 2);
addEdge(adj, 0, 3);
addEdge(adj, 1, 3);
addEdge(adj, 2, 3);
Console.Write("Sum of dependencies is " +
findSum(adj, V));
}
}
// This code is contributed by pratham76
输出:
Sum of dependencies is 4
时间复杂度:O(V),其中 V 是图中的顶点数。