We study the complexity and the i/o-efficient computation of flow on triangulated terrains. We present an acyclic graph, the descent graph, that enables us to trace flow paths in triangulations i/o-efficiently. We use the descent graph to obtain i/o-efficient algorithms for computing river networks and watershed-area maps in O(Sort(d+r)) i/o's, where r is the complexity of the river network and d of the descent graph. Furthermore we describe a data structure based on the subdivision of the terrain induced by the edges of the triangulation and paths of steepest ascent and descent from its vertices. This data structure can be used to report the boundary of the watershed of a query point q or the flow path from q in O(l(s)+Scan(k)) i/o's, where s is the complexity of the subdivision underlying the data structure, l(s) is the number of i/o's used for planar point location in this subdivision, and k is the size of the reported output. On a-fat terrains, that is, triangulated terrains where the minimum angle of any triangle is bounded from below by a, we show that the worst-case complexity of the descent graph and of any path of steepest descent is O(n/a2), where n is the number of triangles in the terrain. The worst-case complexity of the river network and the above-mentioned data structure on such terrains is O(n2/a2). When a is a positive constant this improves the corresponding bounds for arbitrary terrains by a linear factor. We prove that similar bounds cannot be proven for Delaunay triangulations: these can have river networks of complexity T(n3).