  Let G be a graph embedded on a surface of genus g with b boundary cycles. We
describe algorithms to compute multiple types of non-trivial cycles in G, using
different techniques depending on whether or not G is an undirected graph. If G
is undirected, then we give an algorithm to compute a shortest non-separating
cycle in 2^O(g) n log log n time. Similar algorithms are given to compute a
shortest non-contractible or non-null-homologous cycle in 2^O(g+b) n log log n
time. Our algorithms for undirected G combine an algorithm of Kutz with known
techniques for efficiently enumerating homotopy classes of curves that may be
shortest non-trivial cycles.
  Our main technical contributions in this work arise from assuming G is a
directed graph with possibly asymmetric edge weights. For this case, we give an
algorithm to compute a shortest non-contractible cycle in G in O((g^3 + g b)n
log n) time. In order to achieve this time bound, we use a restriction of the
infinite cyclic cover that may be useful in other contexts. We also describe an
algorithm to compute a shortest non-null-homologous cycle in G in O((g^2 + g
b)n log n) time, extending a known algorithm of Erickson to compute a shortest
non-separating cycle. In both the undirected and directed cases, our algorithms
improve the best time bounds known for many values of g and b.
