## 📄️ Introduction

Graphs can solve a plethora of interesting problems!

## 📄️ Bellman Ford Algorithm

Bellman Ford Algorithm computes shortest paths from a single source vertex to all of the other vertices in a weighted digraph

## 📄️ Binary Search Tree

A binary tree where left child is less than or equal to the parent, while the right child is greater

## 📄️ Binary Tree

Binary Tree is a tree structure in which eacho node only contains at most two children

## 📄️ Breadth First Search (BFS)

In BFS, we explore all the closest nodes first before going one step further.

## 📄️ Depth First Search (DFS)

In DFS, we aim to finish one branch before looking at other branches.

## 📄️ Dijkstra's Algorithm

Dijkstra's Algorithm is used to find the shortest paths between nodes in a graph.

## 📄️ Disjoint Set Union (DSU)

Disjoint Set Union is a data structure that allows us to combine any two sets into one.

## 📄️ Kahn's Algorithm

Kahn's Algorithm is a classical algorithm in computer science that is used for topological sorting of directed acyclic graphs (DAGs)

## 📄️ Kruskal's Algorithm

Kruskal's algorithm is a greedy algorithm used to find the minimum spanning tree of a connected, undirected graph.

## 📄️ Lowest Common Ancestor(LCA)

Lowest common ancestor (LCA) of two nodes x and y is the deepest(lowest) node that has both x and y as descendants

## 📄️ Minimum Spanning Tree

A minimum spanning tree is a subset of the edges of a connected undirected graph with the minimum possible total edge weight and it does not contain any cycles.

## 📄️ Tarjan's Algorithm

Tarjan's algorithm can be used to determine the Strongly Connected Components of a directed graph.

## 📄️ Topological Sorting

Topological Sorting is a linear ordering of its vertices such that for every directed edge (u, v) from vertex u to vertex v, u comes before v in the ordering.