from kata_193 import topological_order

def longest_dag_path(n, edges):
    adj, weighted = [[] for _ in range(n)], [[] for _ in range(n)]
    for u, v, weight in edges:
        adj[u].append(v)
        weighted[u].append((v, weight))
    order = topological_order(adj)
    if len(order) != n:
        raise ValueError('graph must be acyclic')
    best = [0] * n
    for u in order:
        for v, weight in weighted[u]:
            best[v] = max(best[v], best[u] + weight)
    return max(best, default=0)
