In this paper, we propose an efficient algorithm to decompose a directed acyclic graph (DAG) G into a minimized set of node-disjoint chains, which cover all the nodes of G. For any two nodes u and v on a chain, if u is above v then there is a path from u to v in G. The best algorithm for this problem up to now needs O(n 3 ) time, where n is the number of the nodes of G. Our algorithm, however, needs only O(max{ N Nn, n m}) time, where n and m are the numbers of the nodes and arcs of G, and N is G's width, defined to be the size of a largest node subset U of G such that for every pair of nodes x, y U, there does not exist a path from x to y or from y to x. N is in general much smaller than n. In addition, by the existing algorithm, 4(n 2 ) extra space (besides the space for G itself) is required to maintain the transitive closure of G to do the task while ours needs only O(Nn) extra space. Considering the nowadays applications with massive graphs including millions and even billions of nodes, like the facebook and twitter, space reduction is also very important.