Back to challenges
Hard 0 solved 0% acceptance

Longest Path in a DAG

Find the heaviest path in a task dependency graph.

Problem

Tasks 0..n−1 form a directed acyclic graph. Each edge [u, v, w] means task v can start w hours after task u. Find the length of the longest path (the critical path). Process nodes in topological order.

Implement longest_path(n, edges).

Input

n: The number of nodes. edges: Edges as [from, to, weight].

Output

Return the total weight of the longest path (0 if there are no edges).

Constraints

1 ≤ n ≤ 100,000; 0 ≤ edges ≤ 200,000; 1 ≤ weight ≤ 10,000; the graph has no cycles

Examples

Example 1
Input:
n = 4
edges = [
    [0, 1, 3],
    [0, 2, 2],
    [1, 3, 4],
    [2, 3, 6]
]

Expected output:
expected = 8
Input:
long long n = 4;
std::vector<std::vector<long long>> edges = {
    {0, 1, 3},
    {0, 2, 2},
    {1, 3, 4},
    {2, 3, 6}
};

Expected output:
long long expected = 8;
Input:
long n = 4;
long[][] edges = new long[][] {
    new long[] {0, 1, 3},
    new long[] {0, 2, 2},
    new long[] {1, 3, 4},
    new long[] {2, 3, 6}
};

Expected output:
long expected = 8;

Explanation

0→1→3 weighs 7, 0→2→3 weighs 8: the longest path is 8.

Example 2
Input:
n = 3
edges = []

Expected output:
expected = 0
Input:
long long n = 3;
std::vector<std::vector<long long>> edges = {};

Expected output:
long long expected = 0;
Input:
long n = 3;
long[][] edges = new long[][] {};

Expected output:
long expected = 0;

Explanation

Without edges every path has length 0.

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.