3
def __init__(self, colors):5
self.adj = [[] for _ in range(self.V)]9
self.visited = [False] * self.V10
self.recursion = [False] * self.V13
def addEdges(self, edges: List[List[int]]):17
def addEdge(self, u, v):22
raise ValueError("Cycled Detected")27
self.visited[u] = True28
self.recursion[u] = True35
self.recursion[u] = False37
def getTopologicalSortOrder(self):40
for u in range(self.V):43
return self.stack[::-1]45
def isConnected(self, u, v):46
return self.adj[u].index(v) >= 053
def largestPathValue(self, colors: str, edges: List[List[int]]) -> int:59
order = g.getTopologicalSortOrder()61
result, dp = 0, [[0] * 26 for _ in range(len(order) + 1)]62
for i in range(len(order) - 1, -1, -1):64
# we are storing the max colours possible for all paths from this node65
for v in g.getAdjs(u):67
dp[u][k] = max(dp[u][k], dp[v][k])69
c = ord(colors[u]) - 9772
result = max(result, max(dp[u]))