Advanced Graphs
1. Tarjan's Algorithm for Strongly Connected Components (SCC)
class Graph:
def __init__(self, vertices):
self.V = vertices
self.graph = collections.defaultdict(list)
self.Time = 0
def addEdge(self, u, v):
self.graph[u].append(v)
def SCCUtil(self, u, low, disc, stackMember, st):
disc[u] = self.Time
low[u] = self.Time
self.Time += 1
stackMember[u] = True
st.append(u)
for v in self.graph[u]:
if disc[v] == -1:
self.SCCUtil(v, low, disc, stackMember, st)
low[u] = min(low[u], low[v])
elif stackMember[v]:
low[u] = min(low[u], disc[v])
w = -1 # To store stack extracted vertices
if low[u] == disc[u]:
component = []
while w != u:
w = st.pop()
component.append(w)
stackMember[w] = False
print("SCC:", component)
def SCC(self):
disc = [-1] * self.V
low = [-1] * self.V
stackMember = [False] * self.V
st = []
for i in range(self.V):
if disc[i] == -1:
self.SCCUtil(i, low, disc, stackMember, st)2. Bridges and Articulation Points (Critical Edges/Nodes)
3. Disjoint Set Union (Union-Find) with Path Compression and Union by Rank
4. Other Advanced Graph Concepts
Pattern Recognition
Interview Strategy
Quick Revision
Last updated